{"$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":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D8","name":"Code Coverage","shortDescription":{"text":"Code Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/D8"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D10","name":"Test Quality","shortDescription":{"text":"Test Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D10"},{"id":"D11","name":"Test Reliability","shortDescription":{"text":"Test Reliability"},"helpUri":"https://codehealth.canine.dev/dimensions/D11"},{"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":"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":"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":"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":"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":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"id":"AC1","name":"Text alternatives","shortDescription":{"text":"Text alternatives"},"helpUri":"https://codehealth.canine.dev/dimensions/AC1"},{"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":"AC4","name":"Keyboard semantics","shortDescription":{"text":"Keyboard semantics"},"helpUri":"https://codehealth.canine.dev/dimensions/AC4"},{"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":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX4","name":"Dependency direction","shortDescription":{"text":"Dependency direction"},"helpUri":"https://codehealth.canine.dev/dimensions/AX4"},{"id":"AXB2","name":"Runtime readiness","shortDescription":{"text":"Runtime readiness"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB2"},{"id":"GD1","name":"Unfinished \u0026 placeholder code","shortDescription":{"text":"Unfinished \u0026 placeholder code"},"helpUri":"https://codehealth.canine.dev/dimensions/GD1"},{"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":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"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":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"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":"R11","name":"Import Boundaries","shortDescription":{"text":"Import Boundaries"},"helpUri":"https://codehealth.canine.dev/dimensions/R11"},{"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":"R4","name":"Test Coverage","shortDescription":{"text":"Test Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/R4"},{"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":"X1","name":"Async correctness","shortDescription":{"text":"Async correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/X1"},{"id":"X12","name":"Unreachable branch","shortDescription":{"text":"Unreachable branch"},"helpUri":"https://codehealth.canine.dev/dimensions/X12"},{"id":"X13","name":"Undrained process stream","shortDescription":{"text":"Undrained process stream"},"helpUri":"https://codehealth.canine.dev/dimensions/X13"},{"id":"X14","name":"Bypassable address classification","shortDescription":{"text":"Bypassable address classification"},"helpUri":"https://codehealth.canine.dev/dimensions/X14"},{"id":"X15","name":"Unvalidated length from an untrusted reader","shortDescription":{"text":"Unvalidated length from an untrusted reader"},"helpUri":"https://codehealth.canine.dev/dimensions/X15"},{"id":"X16","name":"Unfloored truncation loop","shortDescription":{"text":"Unfloored truncation loop"},"helpUri":"https://codehealth.canine.dev/dimensions/X16"},{"id":"X17","name":"Uncapped recursion over a caller-supplied document","shortDescription":{"text":"Uncapped recursion over a caller-supplied document"},"helpUri":"https://codehealth.canine.dev/dimensions/X17"},{"id":"X18","name":"Disposal-pattern correctness","shortDescription":{"text":"Disposal-pattern correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/X18"},{"id":"X19","name":"Unrestored process-global state","shortDescription":{"text":"Unrestored process-global state"},"helpUri":"https://codehealth.canine.dev/dimensions/X19"},{"id":"X20","name":"Mistyped argument guard","shortDescription":{"text":"Mistyped argument guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X20"},{"id":"X21","name":"Side-effecting pattern guard","shortDescription":{"text":"Side-effecting pattern guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X21"},{"id":"X22","name":"Contradicted release guard","shortDescription":{"text":"Contradicted release guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X22"},{"id":"X23","name":"Unguarded diagnostic materialisation","shortDescription":{"text":"Unguarded diagnostic materialisation"},"helpUri":"https://codehealth.canine.dev/dimensions/X23"},{"id":"X25","name":"Inert configuration knob","shortDescription":{"text":"Inert configuration knob"},"helpUri":"https://codehealth.canine.dev/dimensions/X25"},{"id":"X26","name":"Unsynchronised callback handoff","shortDescription":{"text":"Unsynchronised callback handoff"},"helpUri":"https://codehealth.canine.dev/dimensions/X26"},{"id":"X28","name":"Index access outside its own emptiness guard","shortDescription":{"text":"Index access outside its own emptiness guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X28"},{"id":"X29","name":"Per-element action decided by a fixed element","shortDescription":{"text":"Per-element action decided by a fixed element"},"helpUri":"https://codehealth.canine.dev/dimensions/X29"},{"id":"X3","name":"Exception handling","shortDescription":{"text":"Exception handling"},"helpUri":"https://codehealth.canine.dev/dimensions/X3"},{"id":"X30","name":"Support guard that admits what it rejects","shortDescription":{"text":"Support guard that admits what it rejects"},"helpUri":"https://codehealth.canine.dev/dimensions/X30"},{"id":"X32","name":"Type resolved by simple name across every loaded assembly","shortDescription":{"text":"Type resolved by simple name across every loaded assembly"},"helpUri":"https://codehealth.canine.dev/dimensions/X32"},{"id":"X4","name":"Structured logging","shortDescription":{"text":"Structured logging"},"helpUri":"https://codehealth.canine.dev/dimensions/X4"},{"id":"X9","name":"Subsumed condition operand","shortDescription":{"text":"Subsumed condition operand"},"helpUri":"https://codehealth.canine.dev/dimensions/X9"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"snapshotterInjected.frameSnapshotStreamer (cyclomatic 146): snapshotterInjected.frameSnapshotStreamer has cyclomatic complexity 146 (threshold 15). Of this number, 39 points are the body\u0027s own statements and 107 belong to 12 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"32032731deb10942ab6d993aff77c3b41342026a96d31d8e9d68e2b549ab91d8"}},{"ruleId":"D1","level":"warning","message":{"text":"cssTokenizer.tokenize (cyclomatic 143): cssTokenizer.tokenize has cyclomatic complexity 143 (threshold 15). Most of this is not in the body itself: 3 of the 143 points are its own statements and the rest belongs to 18 function literals inside it that branch (lines 143, 470, 342, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/cssTokenizer.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"773fc5126c1be8a60b96b76803a0632e8dd1bc7fae407b3936f186f6e4a8b009"}},{"ruleId":"D1","level":"warning","message":{"text":"roleUtils.getTextAlternativeInternal (cyclomatic 138): roleUtils.getTextAlternativeInternal has cyclomatic complexity 138 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleUtils.ts"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2e231e0f4f8b9eaf3c769f49e67baf1d18c9997dd3bb47a493e729523859517"}},{"ruleId":"D1","level":"warning","message":{"text":"Streamer.captureSnapshot (cyclomatic 106): Streamer.captureSnapshot has cyclomatic complexity 106 (threshold 15). Most of this is not in the body itself: 8 of the 106 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 384, 455, 464, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0571f02b68c4c1cd195b00326dda5ed9c0e868da70e873c90d7fff3aa6674b0"}},{"ruleId":"D1","level":"warning","message":{"text":"uiModeView.UIModeView (cyclomatic 88): uiModeView.UIModeView has cyclomatic complexity 88 (threshold 15). Of this number, 23 points are the body\u0027s own statements and 65 belong to 19 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/uiModeView.tsx"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7ff209625c0db50cea5933ef0f1e29df27d543e9fbf796b0efd4d937de7e7d1"}},{"ruleId":"D1","level":"warning","message":{"text":"generate_channels.generateChannels (cyclomatic 81): generate_channels.generateChannels has cyclomatic complexity 81 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_channels.js"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cf42c3d344bdf0259e5a21cb9df0fffc2b615a55eb535360e9275147d9995c4"}},{"ruleId":"D1","level":"warning","message":{"text":"annotations.Annotations (cyclomatic 80): annotations.Annotations has cyclomatic complexity 80 (threshold 15). Of this number, 43 points are the body\u0027s own statements and 37 belong to 18 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/annotations.tsx"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"98e9d70faab8727ba0ce6cdf2c75a6f4d270be2234dafa0264bfe4fc7e7211a9"}},{"ruleId":"D1","level":"warning","message":{"text":"check_deps.innerCheckDeps (cyclomatic 78): check_deps.innerCheckDeps has cyclomatic complexity 78 (threshold 15). Of this number, 76 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/check_deps.js"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"d53ca58936e21cd78cc1093e6d84534c456aa7d87acd8e332e484321b73ee80e"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorParser.parseAttributeSelector (cyclomatic 69): selectorParser.parseAttributeSelector has cyclomatic complexity 69 (threshold 15). Of this number, 66 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/selectorParser.ts"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6f5037ce3fa9702d10ee337891ef1dde08375fde8089c4a942b05f8c2552a8d"}},{"ruleId":"D1","level":"warning","message":{"text":"dashboard.Dashboard (cyclomatic 68): dashboard.Dashboard has cyclomatic complexity 68 (threshold 15). Of this number, 50 points are the body\u0027s own statements and 18 belong to 13 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/dashboard.tsx"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea370e053bb6e8a9489a7fe3ebfbab31b0f84856324c3e693e138b3d6bb3cb13"}},{"ruleId":"D1","level":"warning","message":{"text":"APIRequestContext._sendRequest (cyclomatic 65): APIRequestContext._sendRequest has cyclomatic complexity 65 (threshold 15). Most of this is not in the body itself: 4 of the 65 points are its own statements and the rest belongs to 13 function literals inside it that branch (lines 392, 396, 353, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/fetch.ts"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"11103ad5bdfd55f302d7e6d4f3b22ffda0660492bbc732cd5904a31554cf8ca0"}},{"ruleId":"D1","level":"warning","message":{"text":"webSocketMock.inject (cyclomatic 61): webSocketMock.inject has cyclomatic complexity 61 (threshold 15). Of this number, 51 points are the body\u0027s own statements and 10 belong to 3 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/webSocketMock.ts"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd4e71b955c974a31d27f9b58e4b24afea90a3f2746ff2bdc1bc1b5c8cae0c47"}},{"ruleId":"D1","level":"warning","message":{"text":"cssParser.parseCSS (cyclomatic 59): cssParser.parseCSS has cyclomatic complexity 59 (threshold 15). Of this number, 49 points are the body\u0027s own statements and 10 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/cssParser.ts"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"56c31252071fa426abec211e5a428d6e8d88b3a631ae42e931547b0a57fb62a0"}},{"ruleId":"D1","level":"warning","message":{"text":"generateDotnetApi.renderMethod (cyclomatic 58): generateDotnetApi.renderMethod has cyclomatic complexity 58 (threshold 15). Of this number, 45 points are the body\u0027s own statements and 13 belong to 4 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"2317fc452a57bf26688b68ebcee9ed7c3b97ee3953346b037b71307b917eddb9"}},{"ruleId":"D1","level":"warning","message":{"text":"InjectedScript.expectSingleElement (cyclomatic 57): InjectedScript.expectSingleElement has cyclomatic complexity 57 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1518}}}],"partialFingerprints":{"codehealthFindingId/v1":"4474ffb6bd1359a6cea1ed4efb0ad0ec9c37f8fb0f196f882bc8de87aef09bea"}},{"ruleId":"D1","level":"warning","message":{"text":"program.program (cyclomatic 57): program.program has cyclomatic complexity 57 (threshold 15). Of this number, 55 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/program.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f1f243701436d196548639be0e0bbbf69879de23e45ab41574679359caf476"}},{"ruleId":"D1","level":"warning","message":{"text":"ansi2html.ansi2html (cyclomatic 56): ansi2html.ansi2html has cyclomatic complexity 56 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/ansi2html.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf3734c078c1b563bbbcc6ab5a158f373db16686e9dfd0cf3820d2daaf0330a3"}},{"ruleId":"D1","level":"warning","message":{"text":"snapshotRenderer.snapshotScript (cyclomatic 55): snapshotRenderer.snapshotScript has cyclomatic complexity 55 (threshold 15). Most of this is not in the body itself: 3 of the 55 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 357, 473, 553, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/snapshotRenderer.ts"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"dead2acf02847943c194e43d7fb4fb06696293bd0f8f62aebd906e07f3aafea1"}},{"ruleId":"D1","level":"warning","message":{"text":"ariaSnapshot.generateAriaTree (cyclomatic 52): ariaSnapshot.generateAriaTree has cyclomatic complexity 52 (threshold 15). Of this number, 23 points are the body\u0027s own statements and 29 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/ariaSnapshot.ts"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"46d4316ce3324470851341f6422fc3c8a282e855a39858dd153e6653cdcc8d88"}},{"ruleId":"D1","level":"warning","message":{"text":"cli.run (cyclomatic 47): cli.run has cyclomatic complexity 47 (threshold 15). Of this number, 34 points are the body\u0027s own statements and 13 belong to 3 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/cli.js"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ac284f158d7c1cee0f71176a7ab044d749932303bb6f17124390816f46f23ed"}},{"ruleId":"D1","level":"warning","message":{"text":"innerRenderMdNode (cyclomatic 47): innerRenderMdNode has cyclomatic complexity 47 (threshold 15). Of this number, 44 points are the body\u0027s own statements and 3 belong to one function item inside it that branches. To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/markdown.js"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1fe1fcab4652bed5153059823a89341eafff5f0fc701865a0e859aaa85e2a08"}},{"ruleId":"D1","level":"warning","message":{"text":"locatorGenerators.innerAsLocators (cyclomatic 46): locatorGenerators.innerAsLocators has cyclomatic complexity 46 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"1677aaf4f56a45667f53d12166b8754c320719e3b153a3e26a5b396f59d6e89f"}},{"ruleId":"D1","level":"warning","message":{"text":"SnapshotRenderer.render (cyclomatic 46): SnapshotRenderer.render has cyclomatic complexity 46 (threshold 15). Most of this is not in the body itself: 1 of the 46 points is its own statement and the rest belongs to 2 function literals inside it that branch (lines 89, 195). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/snapshotRenderer.ts"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e20c20cc44cd3c1343f308dee371a54677a3190e7fd571e037bfe52a64e6dbf"}},{"ruleId":"D1","level":"warning","message":{"text":"recorder.Recorder (cyclomatic 46): recorder.Recorder has cyclomatic complexity 46 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 27 belong to 13 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/recorder/src/recorder.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcf93212c508ed43b2ef2f853d3f187657f1dcbc851cc820826c6aa1638c521a"}},{"ruleId":"D1","level":"warning","message":{"text":"workbench.PartitionedWorkbench (cyclomatic 45): workbench.PartitionedWorkbench has cyclomatic complexity 45 (threshold 15). Of this number, 25 points are the body\u0027s own statements and 20 belong to 10 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/workbench.tsx"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d18bc9d96f66d78ba0e064e87f0fd6cc6ecaf9c4e5c298a11c782ebfef25299"}},{"ruleId":"D1","level":"warning","message":{"text":"ariaSnapshot.parseAriaSnapshot (cyclomatic 44): ariaSnapshot.parseAriaSnapshot has cyclomatic complexity 44 (threshold 15). Most of this is not in the body itself: 9 of the 44 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 175, 152). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/ariaSnapshot.ts"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"35be6ee66f8a84c28d006089244d5c723164d9b0ab145352e3eafab5fdd1346a"}},{"ruleId":"D1","level":"warning","message":{"text":"utilityScriptSerializers.innerSerialize (cyclomatic 44): utilityScriptSerializers.innerSerialize has cyclomatic complexity 44 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/utilityScriptSerializers.ts"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2f4c51dc057f2157bb755b2ed1f532f61a741040394c3bdbabea0957f3f72c9"}},{"ruleId":"D1","level":"warning","message":{"text":"ariaSnapshotRenderer.renderAriaSnapshotAsYaml (cyclomatic 43): ariaSnapshotRenderer.renderAriaSnapshotAsYaml has cyclomatic complexity 43 (threshold 15). Most of this is not in the body itself: 4 of the 43 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 38, 83, 32). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/ariaSnapshotRenderer.ts"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"6427f703e7f3c7aeaffc06a5cee1a00b1a35d0c0fe78ecf81d1d68d002e1f9d4"}},{"ruleId":"D1","level":"warning","message":{"text":"generateDotnetApi.translateType (cyclomatic 42): generateDotnetApi.translateType has cyclomatic complexity 42 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bd48b72e5a8cb55c026048456ebbda63b11ea294faf8666f632c79c2ed0e428"}},{"ruleId":"D1","level":"warning","message":{"text":"JavaLocatorFactory.generateLocator (cyclomatic 40): JavaLocatorFactory.generateLocator has cyclomatic complexity 40 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"dba93d94b792f01c0605c2a19ba44b2c4ee7f72e6d59a4936773367f13819847"}},{"ruleId":"D1","level":"warning","message":{"text":"PythonLocatorFactory.generateLocator (cyclomatic 39): PythonLocatorFactory.generateLocator has cyclomatic complexity 39 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"83da0789028a3aabf331effb55099f56fa9b85e8e725ea73ecf924e28c06fe26"}},{"ruleId":"D1","level":"warning","message":{"text":"APIRequestContext._innerFetch (cyclomatic 39): APIRequestContext._innerFetch has cyclomatic complexity 39 (threshold 15). Most of this is not in the body itself: 1 of the 39 points is its own statement and the rest belongs to one function literal inside it that branches (line 180). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/fetch.ts"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cb230688a34e450e61403ca83c4fb4132bcd0824779cc136274e31e2b9b79b3"}},{"ruleId":"D1","level":"warning","message":{"text":"FrameSession._initialize (cyclomatic 39): FrameSession._initialize has cyclomatic complexity 39 (threshold 15). Of this number, 31 points are the body\u0027s own statements and 8 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0f155522fd989e2334675294556ffd5cc7ad4b8c2d607cbd10e24506be55411"}},{"ruleId":"D1","level":"warning","message":{"text":"consoleTab.useConsoleTabModel (cyclomatic 39): consoleTab.useConsoleTabModel has cyclomatic complexity 39 (threshold 15). Most of this is not in the body itself: 1 of the 39 points is its own statement and the rest belongs to 6 function literals inside it that branch (lines 65, 68, 87, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/consoleTab.tsx"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"c133d6c4e13daa5124592f533f1f59b9f83a5113a903993289bdc4c48b1823b6"}},{"ruleId":"D1","level":"warning","message":{"text":"codeMirrorWrapper.CodeMirrorWrapper (cyclomatic 39): codeMirrorWrapper.CodeMirrorWrapper has cyclomatic complexity 39 (threshold 15). Most of this is not in the body itself: 1 of the 39 points is its own statement and the rest belongs to 4 function literals inside it that branch (lines 131, 79, 126, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/codeMirrorWrapper.tsx"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b7b9778ef2659dc9a25d92b706f8260e13bdaa8db4cf697cc0624bddafefbf4"}},{"ruleId":"D1","level":"warning","message":{"text":"minimist.minimist (cyclomatic 38): minimist.minimist has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/minimist.ts"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"455a9690395cbc5daae3a6f22f7c888e1ccb4cf611aa799aaa9be65221890811"}},{"ruleId":"D1","level":"warning","message":{"text":"JavaScriptLocatorFactory.generateLocator (cyclomatic 37): JavaScriptLocatorFactory.generateLocator has cyclomatic complexity 37 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This shape REPEATS in the file: one other method here (CSharpLocatorFactory.generateLocator) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"a94919ad22f21af5a0a2f8b1ec8ea36bd3a353b5c6a649d31f59200f61d33bea"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpLocatorFactory.generateLocator (cyclomatic 37): CSharpLocatorFactory.generateLocator has cyclomatic complexity 37 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This shape REPEATS in the file: one other method here (JavaScriptLocatorFactory.generateLocator) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":638}}}],"partialFingerprints":{"codehealthFindingId/v1":"4152bd1aa00376634be7c70f0415bd332fec54a5daa18d3288e3500aa2f373d0"}},{"ruleId":"D1","level":"warning","message":{"text":"CRNetworkManager._onRequest (cyclomatic 37): CRNetworkManager._onRequest has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crNetworkManager.ts"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc72c705f47814dbbf6f500aed487c1b1856fbef4b4fee8038dcb8fe0e46ea8e"}},{"ruleId":"D1","level":"warning","message":{"text":"bidiExecutionContext.renderPreview (cyclomatic 37): bidiExecutionContext.renderPreview has cyclomatic complexity 37 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiExecutionContext.ts"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddb609c9eb178e8f5358638012ea20b31a73277d4d7940b99c41fee76194addc"}},{"ruleId":"D1","level":"warning","message":{"text":"workbenchLoader.WorkbenchLoader (cyclomatic 37): workbenchLoader.WorkbenchLoader has cyclomatic complexity 37 (threshold 15). Most of this is not in the body itself: 15 of the 37 points are its own statements and the rest belongs to 11 function literals inside it that branch (lines 103, 148, 56, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/workbenchLoader.tsx"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"95c187d2df9fd51972f519514595f2f3eccce2420c9a40f6680de86d3aa257a9"}},{"ruleId":"D1","level":"warning","message":{"text":"treeView.TreeView (cyclomatic 37): treeView.TreeView has cyclomatic complexity 37 (threshold 15). Most of this is not in the body itself: 5 of the 37 points are its own statements and the rest belongs to 8 function literals inside it that branch (lines 143, 107, 94, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/treeView.tsx"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"603fb8bb01d776868d5c009259613173f85d8d88cb046434482a5bc311c9ebf4"}},{"ruleId":"D1","level":"warning","message":{"text":"dashboard_compressed_v1.compressReports (cyclomatic 37): dashboard_compressed_v1.compressReports has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/flakiness-dashboard/processing/dashboard_compressed_v1.js"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"b367ea6e10561cc40dbc5f84a55c8e76c6a10e3b31fc4f8ed6b86e1c785a9280"}},{"ruleId":"D1","level":"warning","message":{"text":"ariaSnapshot.matchesNode (cyclomatic 36): ariaSnapshot.matchesNode has cyclomatic complexity 36 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/ariaSnapshot.ts"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba51c7f70bf3d9fa68a6a27301c178959a750a22ab730075ceee45d7a199019f"}},{"ruleId":"D1","level":"warning","message":{"text":"ariaSnapshot.renderAriaTreeAsJSON (cyclomatic 36): ariaSnapshot.renderAriaTreeAsJSON has cyclomatic complexity 36 (threshold 15). Most of this is not in the body itself: 4 of the 36 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 468, 516). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/ariaSnapshot.ts"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"b271b7fbf41daf95f1db04deb25939f8255a4bdfacdc60a88c912436f7f6ac58"}},{"ruleId":"D1","level":"warning","message":{"text":"ElementHandle._performPointerAction (cyclomatic 36): ElementHandle._performPointerAction has cyclomatic complexity 36 (threshold 15). Of this number, 23 points are the body\u0027s own statements and 13 belong to 3 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dom.ts"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a34129e98ea88d0446a3246293f811f3c66fd39483d96652066db1ca59ee535"}},{"ruleId":"D1","level":"warning","message":{"text":"TraceModernizer._innerAppendEvent (cyclomatic 34): TraceModernizer._innerAppendEvent has cyclomatic complexity 34 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceModernizer.ts"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a3da69292dd2f7a3137fa728a1f853d676c5b828d575f84b8200a6137f52f02"}},{"ruleId":"D1","level":"warning","message":{"text":"splitView.SplitView (cyclomatic 34): splitView.SplitView has cyclomatic complexity 34 (threshold 15). Of this number, 27 points are the body\u0027s own statements and 7 belong to 2 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/splitView.tsx"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"868e2b8526c8a87931fe46b09d23d18357e1d63a5ac7ea25320012e485601023"}},{"ruleId":"D1","level":"warning","message":{"text":"roleSelectorEngine.queryRole (cyclomatic 33): roleSelectorEngine.queryRole has cyclomatic complexity 33 (threshold 15). Most of this is not in the body itself: 1 of the 33 points is its own statement and the rest belongs to 2 function literals inside it that branch (lines 145, 190). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleSelectorEngine.ts"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6cd1515489f4e56ec05810d9556f0b5ba82ed60fcda6f0537e19620bb5e6bf6"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorGenerator.buildTextCandidates (cyclomatic 33): selectorGenerator.buildTextCandidates has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2a8186f87063610bad52a77011565ec909b8d6fde963207809731665cc8c67a"}},{"ruleId":"D1","level":"warning","message":{"text":"hostPlatform.calculatePlatform (cyclomatic 33): hostPlatform.calculatePlatform has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/hostPlatform.ts"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"e22ca4f1e6d904a7d897b8ebb511c2ef31c9b453ab9b0c8d2467dda04e4d2cda"}},{"ruleId":"D1","level":"warning","message":{"text":"Page.expectScreenshot (cyclomatic 32): Page.expectScreenshot has cyclomatic complexity 32 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 8 belong to 4 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/page.ts"},"region":{"startLine":717}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fff5dd7361e28a489ef14d81de8321a9e828c53eafb6b48b6d7d53f345d54b6"}},{"ruleId":"D1","level":"warning","message":{"text":"browserActions.launchContext (cyclomatic 32): browserActions.launchContext has cyclomatic complexity 32 (threshold 15). Of this number, 31 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/cli/browserActions.ts"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"7718d886806f8276a9eb8cba5f92590c46a981eec8e2e33572540c405ef0649b"}},{"ruleId":"D1","level":"warning","message":{"text":"timeline.Timeline (cyclomatic 32): timeline.Timeline has cyclomatic complexity 32 (threshold 15). Most of this is not in the body itself: 5 of the 32 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 66, 90, 43, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/timeline.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b9eab79b8107b99852d4ee6fced4af23a169f59cf3a74329806956d5658ed1"}},{"ruleId":"D1","level":"warning","message":{"text":"imageDiffView.ImageDiffView (cyclomatic 32): imageDiffView.ImageDiffView has cyclomatic complexity 32 (threshold 15). Of this number, 30 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/shared/imageDiffView.tsx"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ab28749b094b22b6251d9f5fa9da37caf23569b4f241c90d1733fa5106fb45b"}},{"ruleId":"D1","level":"warning","message":{"text":"reportView.ReportView (cyclomatic 31): reportView.ReportView has cyclomatic complexity 31 (threshold 15). Most of this is not in the body itself: 8 of the 31 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 89, 62, 72, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/reportView.tsx"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"c756c10fd555e2b575c288ba633611218c52b422d3979ba2bf4417cd51d80ad9"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorGenerator.generateSelectorFor (cyclomatic 31): selectorGenerator.generateSelectorFor has cyclomatic complexity 31 (threshold 15). Of this number, 28 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb4d015bb145bf8a6e40d65501c8effd48be4521eb58a9e26d5582729ac34c32"}},{"ruleId":"D1","level":"warning","message":{"text":"webAuthn.inject (cyclomatic 31): webAuthn.inject has cyclomatic complexity 31 (threshold 15). Of this number, 26 points are the body\u0027s own statements and 5 belong to 2 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/webAuthn.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"eccf25f572bfa66c8e53ce8e19d7afd25e4ade6594e3b08d959e666b082eb178"}},{"ruleId":"D1","level":"warning","message":{"text":"Response._build (cyclomatic 31): Response._build has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/backend/response.ts"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"a267e2e100e2cb292166abce4d4cbe757acdf6a853e55c892c9bc947ca35e3d2"}},{"ruleId":"D1","level":"warning","message":{"text":"playbackControl.usePlayback (cyclomatic 31): playbackControl.usePlayback has cyclomatic complexity 31 (threshold 15). Most of this is not in the body itself: 11 of the 31 points are its own statements and the rest belongs to 11 function literals inside it that branch (lines 150, 124, 205, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/playbackControl.tsx"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"c05023ba429248cebf7af12363d121a128812069168e966982d33e41f73331fe"}},{"ruleId":"D1","level":"warning","message":{"text":"utilityScriptSerializers.parseEvaluationResultValue (cyclomatic 30): utilityScriptSerializers.parseEvaluationResultValue has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/utilityScriptSerializers.ts"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"07a1ceb1507be7aaaa58a93430c05a8acf4903c7ae49d83c6e6659caf904be21"}},{"ruleId":"D1","level":"warning","message":{"text":"Frame._expectInternal (cyclomatic 30): Frame._expectInternal has cyclomatic complexity 30 (threshold 15). Of this number, 26 points are the body\u0027s own statements and 4 belong to 2 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":1530}}}],"partialFingerprints":{"codehealthFindingId/v1":"8908fc4885bca9c3cb0217a6c20d9a416f43d42375af9c5a27b30e2bd6dc3738"}},{"ruleId":"D1","level":"warning","message":{"text":"traceConsole.traceConsole (cyclomatic 30): traceConsole.traceConsole has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/trace/traceConsole.ts"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"74bb9f4952d475f60784de5811382b0d8b97aff41a9b67ac1c58cb5739f51223"}},{"ruleId":"D1","level":"warning","message":{"text":"serializers.innerSerializeValue (cyclomatic 30): serializers.innerSerializeValue has cyclomatic complexity 30 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/protocol/src/serializers.ts"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"b670d9189b051e7eac07950b18971c5ab601a79429a9465a3ce1095886fcc939"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutionContext._createRemoteObject (cyclomatic 29): ExecutionContext._createRemoteObject has cyclomatic complexity 29 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/content/Runtime.js"},"region":{"startLine":460}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9931271f86347319b3c0c365e26cbf7c8a70ebc61dcf3561972f917ecd2e20a"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorGenerator.buildNoTextCandidates (cyclomatic 29): selectorGenerator.buildNoTextCandidates has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"55a5ae09e0d17eaddd6f05e1b027d2fc7089fb8f71731ffda65a4f3ad8b90136"}},{"ruleId":"D1","level":"warning","message":{"text":"serializers.innerParseSerializedValue (cyclomatic 29): serializers.innerParseSerializedValue has cyclomatic complexity 29 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/protocol/src/serializers.ts"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e09cbfe3ab480e99d6c3c164c6979a1377704da2ef922840e095f93cafb6a85"}},{"ruleId":"D1","level":"warning","message":{"text":"generateNameDefault (cyclomatic 29): generateNameDefault has cyclomatic complexity 29 (threshold 15). Of this number, 23 points are the body\u0027s own statements and 6 belong to 2 function items inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"525a78caeb1319c842a34e54b695f3d8ec376e5a3b308c1a3fdd5f8801847aa3"}},{"ruleId":"D1","level":"warning","message":{"text":"InjectedScript.elementState (cyclomatic 28): InjectedScript.elementState has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":783}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f6755a372d11df1f7d05bc2c222b6d25dcf7c476e75ef25b5f23f59efdccf23"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorParser.parseSelectorString (cyclomatic 28): selectorParser.parseSelectorString has cyclomatic complexity 28 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 14 belong to 2 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/selectorParser.ts"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0dacf3beb87fcd99079030e7b44998480f1ef4e8fb236765495156b58bbcbec"}},{"ruleId":"D1","level":"warning","message":{"text":"JavaScriptLanguageGenerator._generateActionCall (cyclomatic 28): JavaScriptLanguageGenerator._generateActionCall has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/codegen/javascript.ts"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a02c85033a0d84fceb0c4eaf2359670478b7561dac1ab0497f34da1321cee4a"}},{"ruleId":"D1","level":"warning","message":{"text":"jsonSchema.validate (cyclomatic 28): jsonSchema.validate has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/jsonSchema.ts"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cc942b530972872e08bde839f508512852bf428dfbd1360c8f5aebd19ed8e55"}},{"ruleId":"D1","level":"warning","message":{"text":"traceRequests.traceRequest (cyclomatic 28): traceRequests.traceRequest has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/trace/traceRequests.ts"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce65bd8c68fe32c72a476e2c720dddf79892a0846ea2a24ec28a86c05a2b3001"}},{"ruleId":"D1","level":"warning","message":{"text":"main.doFetch (cyclomatic 28): main.doFetch has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/sw/main.ts"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec6ed38fec39869f8879924e0d2ec92b3d601977845dc1b9226b314a596fa58"}},{"ruleId":"D1","level":"warning","message":{"text":"listView.ListView (cyclomatic 28): listView.ListView has cyclomatic complexity 28 (threshold 15). Most of this is not in the body itself: 5 of the 28 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 89, 124, 80, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/listView.tsx"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"8efadd7c8072ca588c9564aaf7aa30c3c5510b969350f14ec207324018818128"}},{"ruleId":"D1","level":"warning","message":{"text":"roleSelectorEngine.validateAttributes (cyclomatic 27): roleSelectorEngine.validateAttributes has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleSelectorEngine.ts"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"c74c7b5d39021772054c754f45bf03fe5467e284f678a3775e9313a3ff8b5682"}},{"ruleId":"D1","level":"warning","message":{"text":"WVPage._onConsoleMessage (cyclomatic 27): WVPage._onConsoleMessage has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvPage.ts"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dae63b961e69e65f34096e59e9a3e9f0f007b786791ec9e0dd3bd9c1e1728a4"}},{"ruleId":"D1","level":"warning","message":{"text":"innerCheckDeps::visit (cyclomatic 27): innerCheckDeps::visit has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/check_deps.js"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"9caa0916693a9dc0ad712a64dcf4463d0acd1143e2720abcba596a6b8b77ce7e"}},{"ruleId":"D1","level":"warning","message":{"text":"TargetRegistry.constructor (cyclomatic 26): TargetRegistry.constructor has cyclomatic complexity 26 (threshold 15). Most of this is not in the body itself: 5 of the 26 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 185, 152, 220, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/TargetRegistry.js"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cc4144a75741a2dce869b815bc1877b2ff84a78c5581dcfc0695a78a2d1be88"}},{"ruleId":"D1","level":"warning","message":{"text":"ariaSnapshot.toAriaNode (cyclomatic 26): ariaSnapshot.toAriaNode has cyclomatic complexity 26 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/ariaSnapshot.ts"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"9535587ba7cb12b6e350247acbc9d48612f5f3c41bac10222141597662053700"}},{"ruleId":"D1","level":"warning","message":{"text":"KeyParser._applyAttribute (cyclomatic 26): KeyParser._applyAttribute has cyclomatic complexity 26 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/ariaSnapshot.ts"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"800aa5c3f4eb0bdad7084f13f6ef0146c1dab8e09b0d3f3d891541a265bdc120"}},{"ruleId":"D1","level":"warning","message":{"text":"TraceModel.constructor (cyclomatic 26): TraceModel.constructor has cyclomatic complexity 26 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceModel.ts"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"0438be143c22d70c7bb5556e67047d80260c23607f9822c5b4e46920b45096ac"}},{"ruleId":"D1","level":"warning","message":{"text":"screenshotter.inPagePrepareForScreenshots (cyclomatic 26): screenshotter.inPagePrepareForScreenshots has cyclomatic complexity 26 (threshold 15). Most of this is not in the body itself: 12 of the 26 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 111, 62, 146, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/screenshotter.ts"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"db518c78c0f72c688761cc3846f963e9896484958c92b900c4a2fabf9fae54c1"}},{"ruleId":"D1","level":"warning","message":{"text":"Frame.waitForSelector (cyclomatic 26): Frame.waitForSelector has cyclomatic complexity 26 (threshold 15). Most of this is not in the body itself: 8 of the 26 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 846, 853). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"f11c46dbfbbe8c6bc24615b400783a2bfa95a380f03eeea19938e4b7cd1f7a6f"}},{"ruleId":"D1","level":"warning","message":{"text":"PlaywrightServer.constructor (cyclomatic 26): PlaywrightServer.constructor has cyclomatic complexity 26 (threshold 15). Most of this is not in the body itself: 10 of the 26 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 94, 70, 81, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/remote/playwrightServer.ts"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"50b48aaa7f78909ed77ffe4b1cc7944d12e36421e447211779495a077e339cfa"}},{"ruleId":"D1","level":"warning","message":{"text":"InjectedScript.dispatchEvent (cyclomatic 25): InjectedScript.dispatchEvent has cyclomatic complexity 25 (threshold 15). Of this number, 13 points are the body\u0027s own statements and 12 belong to 5 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1205}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5656e88a1758891b4bbb71839a1aa1d3e16f1b57aa7b146f9c2bd48c023d847"}},{"ruleId":"D1","level":"warning","message":{"text":"markdown.buildTree (cyclomatic 25): markdown.buildTree has cyclomatic complexity 25 (threshold 15). Of this number, 20 points are the body\u0027s own statements and 5 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/markdown.js"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df4cd2499fe677dd7dfc13b7069122f41093aa72211491d7c25e869a9436ab8"}},{"ruleId":"D1","level":"warning","message":{"text":"index.jsonToTS (cyclomatic 25): index.jsonToTS has cyclomatic complexity 25 (threshold 15). Most of this is not in the body itself: 1 of the 25 points is its own statement and the rest belongs to 12 function literals inside it that branch (lines 43, 47, 69, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/protocol-types-generator/index.js"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"35463f17fe4433ab367008a6b3e8ba6c92e1ba0e36fa4284fe4f4e129da66354"}},{"ruleId":"D1","level":"warning","message":{"text":"Filter.matches (cyclomatic 24): Filter.matches has cyclomatic complexity 24 (threshold 15). Of this number, 12 points are the body\u0027s own statements and 12 belong to 5 function literals inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/filter.ts"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"47113ddc24c88ec58bb985c6fafb90582a0fa5e3ce086cd83a3d9f258b23719e"}},{"ruleId":"D1","level":"warning","message":{"text":"injectedScript.createTextMatcher (cyclomatic 24): injectedScript.createTextMatcher has cyclomatic complexity 24 (threshold 15). Of this number, 22 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1780}}}],"partialFingerprints":{"codehealthFindingId/v1":"925a879db67804eae3516d2e534b48f2e1999d626880b20555be8e6c1ab9d07e"}},{"ruleId":"D1","level":"warning","message":{"text":"JavaLanguageGenerator._generateActionCall (cyclomatic 24): JavaLanguageGenerator._generateActionCall has cyclomatic complexity 24 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/codegen/java.ts"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5129139e6ce90d222123ef1fca70d52129b1d54fae3df26ce5bfbfa80dd55a4"}},{"ruleId":"D1","level":"warning","message":{"text":"BrowserContextDispatcher.constructor (cyclomatic 24): BrowserContextDispatcher.constructor has cyclomatic complexity 24 (threshold 15). Most of this is not in the body itself: 7 of the 24 points are its own statements and the rest belongs to 8 function literals inside it that branch (lines 155, 124, 179, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa5145a93975faa17baf9b0406ff3aa8efbf6f418d02386c7e81617d5baa8489"}},{"ruleId":"D1","level":"warning","message":{"text":"processLauncher.launchProcess (cyclomatic 24): processLauncher.launchProcess has cyclomatic complexity 24 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 5 belong to one function literal inside it that branches. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/processLauncher.ts"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"58882ab4cb73deb0f3cd26f2fcdd230593ab8525edfb34e2c82661f90e33eebc"}},{"ruleId":"D1","level":"warning","message":{"text":"debuggerPanel.DebuggerPanel (cyclomatic 23): debuggerPanel.DebuggerPanel has cyclomatic complexity 23 (threshold 15). Most of this is not in the body itself: 7 of the 23 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 89, 50, 44, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/debuggerPanel.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"370518198b47eae417e5e2cff1aaf5105f579d62190e3dd71188ff5b351e4f76"}},{"ruleId":"D1","level":"warning","message":{"text":"SelectorEvaluatorImpl._matchesParents (cyclomatic 23): SelectorEvaluatorImpl._matchesParents has cyclomatic complexity 23 (threshold 15). Most of this is not in the body itself: 2 of the 23 points are its own statements and the rest belongs to one function literal inside it that branches (line 268). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorEvaluator.ts"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d1ac653b77b05a4b572c2ab65329e57fa5e3b3948547862540c4b088e025a55"}},{"ruleId":"D1","level":"warning","message":{"text":"InjectedScript.expectHitTarget (cyclomatic 23): InjectedScript.expectHitTarget has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1023}}}],"partialFingerprints":{"codehealthFindingId/v1":"609c91019126234bfde39247bc2f4c10b29e47f808d2ea09b76ada34587d62ce"}},{"ruleId":"D1","level":"warning","message":{"text":"injectedScript.deepEquals (cyclomatic 23): injectedScript.deepEquals has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1877}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bb43c10f8f369d7d5f4495649561392a403f500498a90412d7d72c8c2b02eb1"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorParser.parseSelector (cyclomatic 23): selectorParser.parseSelector has cyclomatic complexity 23 (threshold 15). Of this number, 22 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/selectorParser.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1dcf52828368c8b8d1846eed91a8ce645bbffa8acc2cbbcf1859b2778c77457"}},{"ruleId":"D1","level":"warning","message":{"text":"CSharpLanguageGenerator._generateActionCall (cyclomatic 23): CSharpLanguageGenerator._generateActionCall has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/codegen/csharp.ts"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"28247dc69f94dd97846586e4ce715114dd12220b14c1a2ef2c2430ffcc373d87"}},{"ruleId":"D1","level":"warning","message":{"text":"PythonLanguageGenerator._generateActionCall (cyclomatic 23): PythonLanguageGenerator._generateActionCall has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/codegen/python.ts"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"084175f075ca0b646a4c9fcb2f5c2824e246d47c85424935f4bc3327b4991448"}},{"ruleId":"D1","level":"warning","message":{"text":"TraceModernizer._modernize_8_to_9 (cyclomatic 23): TraceModernizer._modernize_8_to_9 has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceModernizer.ts"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0db210a42055c3be39df683e222b599ebe8189c8ae638dfea1b7d1a3e928013"}},{"ruleId":"D1","level":"warning","message":{"text":"TraceLoader.load (cyclomatic 23): TraceLoader.load has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceLoader.ts"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2f3cf4c8618c987be81f8a2c3c66c246de5206ec1b85a71bb2fbb164790d430"}},{"ruleId":"D1","level":"warning","message":{"text":"FrameSelectors._callOnSelectorInternal (cyclomatic 23): FrameSelectors._callOnSelectorInternal has cyclomatic complexity 23 (threshold 15). Most of this is not in the body itself: 8 of the 23 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 261, 258, 285). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frameSelectors.ts"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"c409195ec67831822107103ab3773973fb360ca7cf257a261c59a2ce47cb7325"}},{"ruleId":"D1","level":"warning","message":{"text":"cookieStore.parseRawCookie (cyclomatic 23): cookieStore.parseRawCookie has cyclomatic complexity 23 (threshold 15). Of this number, 22 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/cookieStore.ts"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"f238f22d3a6b3c20b8f4a4c16678a44accf5f443640106f9eeebf495ee14cce0"}},{"ruleId":"D1","level":"warning","message":{"text":"HarTracer._onRequestFinished (cyclomatic 23): HarTracer._onRequestFinished has cyclomatic complexity 23 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 8 belong to 5 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/har/harTracer.ts"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"767fed1090820161b146fbe763914e0e30c7fa07f599b70b24e3cbc163338881"}},{"ruleId":"D1","level":"warning","message":{"text":"HarTracer._onWebSocket (cyclomatic 23): HarTracer._onWebSocket has cyclomatic complexity 23 (threshold 15). Most of this is not in the body itself: 6 of the 23 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 459, 475, 511, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/har/harTracer.ts"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c9b8d0b4317845f96710a101cced708e03cdc2e21ff728212b89e6f4076abf3"}},{"ruleId":"D1","level":"warning","message":{"text":"HarBackend._harFindResponse (cyclomatic 23): HarBackend._harFindResponse has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/harBackend.ts"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fb0932d0109f3615c1fbff9d9fbf5c83209d977ee051cea1c4e01de251d4464"}},{"ruleId":"D1","level":"warning","message":{"text":"Response.serialize (cyclomatic 23): Response.serialize has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/backend/response.ts"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e41b4b42f7eb0e2bd793b011aa22e01c82c0735f00e2aee5f918921d13f3485"}},{"ruleId":"D1","level":"warning","message":{"text":"roleUtils.innerAccumulatedElementText (cyclomatic 22): roleUtils.innerAccumulatedElementText has cyclomatic complexity 22 (threshold 15). Of this number, 12 points are the body\u0027s own statements and 10 belong to one function literal inside it that branches. To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleUtils.ts"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"21e9f949927c2fc2c71ba229cb5b497db4ad216a7da239a3f483911c8358e33c"}},{"ruleId":"D1","level":"warning","message":{"text":"Registry.constructor (cyclomatic 22): Registry.constructor has cyclomatic complexity 22 (threshold 15). Most of this is not in the body itself: 9 of the 22 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 516, 747, 512, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/registry/index.ts"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"62fbe10e062c0ba180191dd1c7da4f2a178423ed83b9a186686fb273f67f9ed1"}},{"ruleId":"D1","level":"warning","message":{"text":"Chromium.launchWithSeleniumHub (cyclomatic 22): Chromium.launchWithSeleniumHub has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/chromium.ts"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"150b0276d618fce3681a8aa88c186b45859dde9ad8432c83df5751f278b99339"}},{"ruleId":"D1","level":"warning","message":{"text":"consoleTab.format (cyclomatic 22): consoleTab.format has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/consoleTab.tsx"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9ca5fc8ba0b05392faa231a433c8f37d02096d1b17e671fcc071dde119c0869"}},{"ruleId":"D1","level":"warning","message":{"text":"stackTrace.parseStackFrame (cyclomatic 22): stackTrace.parseStackFrame has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/stackTrace.ts"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed425ae5a8f1dad73ebc02c5f58348c02b946e54c3315b719bed4999f0def107"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 22): (anonymous) has cyclomatic complexity 22 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 1 belongs to 2 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/roll_browser.js"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fc19f3e8fc28fcd9a47f4503e1dbc930114e5192ac74c860599284d2e7c725a"}},{"ruleId":"D1","level":"warning","message":{"text":"parseMember (cyclomatic 22): parseMember has cyclomatic complexity 22 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/api_parser.js"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"17903b8fa83173e3c88b2105acfbd7311fbcb947dc97c8092225194d371072fe"}},{"ruleId":"D1","level":"warning","message":{"text":"(anonymous) (cyclomatic 22): (anonymous) has cyclomatic complexity 22 (threshold 15). Of this number, 21 points are the body\u0027s own statements and 1 belongs to 13 function items inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/linux-browser-dependencies/inside_docker/list_dependencies.js"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"78ad6d7bb8a9ac2be60733102e105b88d178a62c504d94c33adb088222534425"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorGenerator.cssEscapeCharacter (cyclomatic 21): selectorGenerator.cssEscapeCharacter has cyclomatic complexity 21 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"20e30499439a22c1e221bec89f79d70e435ab43e1857d3f0e4a3fe0198539055"}},{"ruleId":"D1","level":"warning","message":{"text":"WebKit.defaultArgs (cyclomatic 21): WebKit.defaultArgs has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webkit.ts"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d0fd40f995b60fec0f30d5d09d9f46d5e4c65775a4681556cd03d1fb93e7c75"}},{"ruleId":"D1","level":"warning","message":{"text":"TextOutput.list (cyclomatic 21): TextOutput.list has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/output.ts"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce55d9ed407253e75572c70c011ed479d6f36fae975e70bf53baef68af9cb597"}},{"ruleId":"D1","level":"warning","message":{"text":"config.resolveCLIConfigForCLI (cyclomatic 21): config.resolveCLIConfigForCLI has cyclomatic complexity 21 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/mcp/config.ts"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"6875d871f931b1db2c67a75e308489544d9bcb1a3367d1e63fc150dbd56829f1"}},{"ruleId":"D1","level":"warning","message":{"text":"config.configFromCLIOptions (cyclomatic 21): config.configFromCLIOptions has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/mcp/config.ts"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"0729ed292cb022db42ae965f20b8ae06b71c131db3dd2a996ff3580e619b7f95"}},{"ruleId":"D1","level":"warning","message":{"text":"callTab.propertyToString (cyclomatic 21): callTab.propertyToString has cyclomatic complexity 21 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/callTab.tsx"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"912b265d201f5343aa254782cdef1418409be33ba575f91a6e092f9aaa8e67af"}},{"ruleId":"D1","level":"warning","message":{"text":"resizeView.ResizeView (cyclomatic 21): resizeView.ResizeView has cyclomatic complexity 21 (threshold 15). Of this number, 13 points are the body\u0027s own statements and 8 belong to 2 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/shared/resizeView.tsx"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f464e0010d1502378309acb1d18754ebd1c0724bf57e79e905d29db57448dde"}},{"ruleId":"D1","level":"warning","message":{"text":"markdown.flattenWrappedLines (cyclomatic 21): markdown.flattenWrappedLines has cyclomatic complexity 21 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/markdown.js"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"35f34108392bcf65293bdb03d374d906ae42e59566ecb6d7cce1f1b204f69d6a"}},{"ruleId":"D1","level":"warning","message":{"text":"parseOverrides.parseOverrides (cyclomatic 21): parseOverrides.parseOverrides has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_types/parseOverrides.js"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"06e92c1bd8efd334a8e8850ffc15ce3053850cfb157bb48158bf4cdf69ba2171"}},{"ruleId":"D1","level":"warning","message":{"text":"TypesGenerator.stringifySimpleType (cyclomatic 21): TypesGenerator.stringifySimpleType has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_types/index.js"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"30630800ff181bb9c71d18959e28b8b6f8e65f8a0e738b6a23a91496bb691f6e"}},{"ruleId":"D1","level":"warning","message":{"text":"sessionSidebar.SessionSidebar (cyclomatic 20): sessionSidebar.SessionSidebar has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 4 of the 20 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 103, 150, 83, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/sessionSidebar.tsx"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e417c8e258ee9f6ed892adae39a9e87351c1ddf704d7257b8da4848344266a7"}},{"ruleId":"D1","level":"warning","message":{"text":"RecordActionTool._shouldGenerateKeyPressFor (cyclomatic 20): RecordActionTool._shouldGenerateKeyPressFor has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (JsonRecordActionTool._shouldGenerateKeyPressFor) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/recorder/recorder.ts"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f274503522c234615507dd62bb6c1b8643ca0dd6b986eeff3a90ed8bd60b0ad"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonRecordActionTool._shouldGenerateKeyPressFor (cyclomatic 20): JsonRecordActionTool._shouldGenerateKeyPressFor has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (RecordActionTool._shouldGenerateKeyPressFor) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/recorder/recorder.ts"},"region":{"startLine":810}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ce8b2a73291d8d60ab833627aeeb4df394aae239c0e4f76fd9c75322b97000b"}},{"ruleId":"D1","level":"warning","message":{"text":"istanbulCoverage.mergeIstanbulCoverage (cyclomatic 20): istanbulCoverage.mergeIstanbulCoverage has cyclomatic complexity 20 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/istanbulCoverage.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"41a4ad789928f75733e2ec7bcc87e2e7bccf328a6748314a932372c9d87e1f4b"}},{"ruleId":"D1","level":"warning","message":{"text":"locatorParser.tokenize (cyclomatic 20): locatorParser.tokenize has cyclomatic complexity 20 (threshold 15). Of this number, 12 points are the body\u0027s own statements and 8 belong to 2 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorParser.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"25f3f29ba9025724b63ac961285a0b55ef967c0fe7149e9d1be2823919e901fb"}},{"ruleId":"D1","level":"warning","message":{"text":"Frame.expect (cyclomatic 20): Frame.expect has cyclomatic complexity 20 (threshold 15). Of this number, 19 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":1468}}}],"partialFingerprints":{"codehealthFindingId/v1":"d26f2adcdfeafea574ae997acff1db3fe9186bd0a36dab1e62ff6fe27f35deb4"}},{"ruleId":"D1","level":"warning","message":{"text":"APIRequestContext.fetch (cyclomatic 20): APIRequestContext.fetch has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/fetch.ts"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e074331be2cf219d120f4ba9e2294e97a9881a77e1afbf38f3c0511a5ad2ddb"}},{"ruleId":"D1","level":"warning","message":{"text":"browserContext.verifyClientCertificates (cyclomatic 20): browserContext.verifyClientCertificates has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/browserContext.ts"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"5655cac14d545e74abfd00bc24ca1e686ed1e833d3c5d084ba395dd87abfb59d"}},{"ruleId":"D1","level":"warning","message":{"text":"config.validateBrowserConfig (cyclomatic 20): config.validateBrowserConfig has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/mcp/config.ts"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"f14d632fdf2bdd248dbb701ef284cd70d237a2a892d7140dca8d79a289b586bc"}},{"ruleId":"D1","level":"warning","message":{"text":"actionList.renderAction (cyclomatic 20): actionList.renderAction has cyclomatic complexity 20 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/actionList.tsx"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"661634cbe4b96c0f1f778ee14fd694f3376c418c183023145769329e45c318ce"}},{"ruleId":"D1","level":"warning","message":{"text":"ariaModeView.AriaModeView (cyclomatic 20): ariaModeView.AriaModeView has cyclomatic complexity 20 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 4 belong to 3 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/ariaModeView.tsx"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"01ceef81e2f0504ce195fb13e8db906921a8fd0379a2b30263771f730d8bdafa"}},{"ruleId":"D1","level":"warning","message":{"text":"sourceTab.useSources (cyclomatic 20): sourceTab.useSources has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 1 of the 20 points is its own statement and the rest belongs to one function literal inside it that branches (line 39). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/sourceTab.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fbd2ae755227caeac78052b7ee1d856c1782debb3fc0c3af8b4ad06c28278af"}},{"ruleId":"D1","level":"warning","message":{"text":"build_deps_true.collectImports (cyclomatic 20): build_deps_true.collectImports has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/build_deps_true.js"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"51632266a0e56cc56b43cb50b8f32154834a4448c57cd322d7025a8ce877c279"}},{"ruleId":"D1","level":"warning","message":{"text":"api_parser.applyTemplates (cyclomatic 20): api_parser.applyTemplates has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 3 of the 20 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 298, 332). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/api_parser.js"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"805e49e95b79160d0780e4b969dbbe362f607fffbfd81241bcf28097b61de08c"}},{"ruleId":"D1","level":"warning","message":{"text":"TypesGenerator.classBody (cyclomatic 20): TypesGenerator.classBody has cyclomatic complexity 20 (threshold 15). Most of this is not in the body itself: 8 of the 20 points are its own statements and the rest belongs to one function literal inside it that branches (line 281). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_types/index.js"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbc958715a42c5ec301fd2df911cf4ecdac1b4c3383ad083fd85b01be06db90f"}},{"ruleId":"D1","level":"warning","message":{"text":"Helper.getNetworkErrorStatusText (cyclomatic 19): Helper.getNetworkErrorStatusText has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/Helper.js"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2deb2a6e80811ae9e836a529214bb3a1a04bdedd9b183cb396b88614fcd4351"}},{"ruleId":"D1","level":"warning","message":{"text":"connect.ConnectApp (cyclomatic 19): connect.ConnectApp has cyclomatic complexity 19 (threshold 15). Most of this is not in the body itself: 5 of the 19 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 50, 131, 123). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/extension/src/ui/connect.tsx"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"8aa13657f2777429b8b89580734ac9ca05610403e4ac4fb4e95d101097a0a2e5"}},{"ruleId":"D1","level":"warning","message":{"text":"InjectedScript.selectOptions (cyclomatic 19): InjectedScript.selectOptions has cyclomatic complexity 19 (threshold 15). Most of this is not in the body itself: 8 of the 19 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 856, 859). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":843}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4e6cebe582caab41da9a71275a395f90a2f682a2ab252807f4004781dcd8563"}},{"ruleId":"D1","level":"warning","message":{"text":"urlMatch.resolveGlobBase (cyclomatic 19): urlMatch.resolveGlobBase has cyclomatic complexity 19 (threshold 15). Of this number, 10 points are the body\u0027s own statements and 9 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/urlMatch.ts"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"c98286e42ad370d48f31317b354d574b5a4eff5596da1548baa41b3ff31a2ca0"}},{"ruleId":"D1","level":"warning","message":{"text":"BidiConnection._dispatchMessage (cyclomatic 19): BidiConnection._dispatchMessage has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiConnection.ts"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"c140de6779716013f62f4a7ce0dbbf83b011e3f80060f49dbd9fd2112c238dca"}},{"ruleId":"D1","level":"warning","message":{"text":"BidiNetworkManager._onBeforeRequestSent (cyclomatic 19): BidiNetworkManager._onBeforeRequestSent has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: bidiNetworkManager.resourceTypeFromBidi (cyclomatic 23) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiNetworkManager.ts"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"be08b3a3dc395be480ff0aca075e7c70541a77d20af3e62eb5c8a5ad25f36754"}},{"ruleId":"D1","level":"warning","message":{"text":"ElementHandle._retryAction (cyclomatic 19): ElementHandle._retryAction has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dom.ts"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"70e46023576187880fe47b8cb60d64e3ee0ffc85fb244e68e9d1f3cd110ca506"}},{"ruleId":"D1","level":"warning","message":{"text":"ElementHandle._setInputFiles (cyclomatic 19): ElementHandle._setInputFiles has cyclomatic complexity 19 (threshold 15). Of this number, 10 points are the body\u0027s own statements and 9 belong to one function literal inside it that branches. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dom.ts"},"region":{"startLine":718}}}],"partialFingerprints":{"codehealthFindingId/v1":"014dd1c5d524e165421da5bf81fb886d3be38172981f12cd5d0b86b29d1e4500"}},{"ruleId":"D1","level":"warning","message":{"text":"attachmentsTab.AttachmentsTab (cyclomatic 19): attachmentsTab.AttachmentsTab has cyclomatic complexity 19 (threshold 15). Most of this is not in the body itself: 6 of the 19 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 97, 125, 145). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/attachmentsTab.tsx"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"5425475aaa95f94e6c437af311d242a0c1fc6c2f5246da478409238537bbab0c"}},{"ruleId":"D1","level":"warning","message":{"text":"_innerRenderNodes (cyclomatic 19): _innerRenderNodes has cyclomatic complexity 19 (threshold 15). Most of this is not in the body itself: 1 of the 19 points is its own statement and the rest belongs to 2 function items inside it that branch ((anonymous), handleListItem). Those helpers are already separate functions, so extracting the branching again is not available. To reduce it, move them out of the body to the enclosing scope, where each is measured, reviewed and tested on its own, and reduce whichever one then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/dotnetXmlDocumentation.js"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"995ce18042afaa6fca46c207d638aca9323fa38312015694f36ad8572f38efd1"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorGenerator.cssFallback (cyclomatic 18): selectorGenerator.cssFallback has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"78671bdf5c62fc79eb915a6882a9196e86b156047e855a6280a9e0196de4b72b"}},{"ruleId":"D1","level":"warning","message":{"text":"InjectedScript.setupHitTargetInterceptor (cyclomatic 18): InjectedScript.setupHitTargetInterceptor has cyclomatic complexity 18 (threshold 15). Most of this is not in the body itself: 6 of the 18 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 1162, 1188). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1135}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee60b5dbc23e0eb0c593d40d58b653ba0c9731d8fdd8fc3a412acf58de5d05f1"}},{"ruleId":"D1","level":"warning","message":{"text":"Overlay.setUIState (cyclomatic 18): Overlay.setUIState has cyclomatic complexity 18 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/recorder/recorder.ts"},"region":{"startLine":1184}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0f77c093bc6a7d352539627b50d7a91a6886747551283a7315483422b562f8"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorParser.splitSelectorByFrame (cyclomatic 18): selectorParser.splitSelectorByFrame has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/selectorParser.ts"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca0f518f14f7d7e1e700a66207e00ef5c670375383e61429649a5f64bbeb6ad"}},{"ruleId":"D1","level":"warning","message":{"text":"java.formatContextOptions (cyclomatic 18): java.formatContextOptions has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/codegen/java.ts"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3c6567f1041611c30e066ba7ce0671af85c8dd199b74322c8899656a5950cf2"}},{"ruleId":"D1","level":"warning","message":{"text":"imageUtils.scaleImageToSize (cyclomatic 18): imageUtils.scaleImageToSize has cyclomatic complexity 18 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/imageUtils.ts"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"322f838274d3efa8cb327a0bacda90ef89b319d3cac6574c86dd827b18dc96fc"}},{"ruleId":"D1","level":"warning","message":{"text":"urlMatch.globToRegexPattern (cyclomatic 18): urlMatch.globToRegexPattern has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/urlMatch.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"6753084774587864d16d420d0ef5f345dff16f12feb20c923e634b65971b0320"}},{"ruleId":"D1","level":"warning","message":{"text":"Route._innerFulfill (cyclomatic 18): Route._innerFulfill has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/network.ts"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b1e887eb6ec21f9835ff1d54460c0f219063daad93adf6346e774f82672b181"}},{"ruleId":"D1","level":"warning","message":{"text":"dependencies.validateDependenciesWindows (cyclomatic 18): dependencies.validateDependenciesWindows has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/registry/dependencies.ts"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8140f4610b1004e8b07a0395de3a569dea8ec67ccdb91b9bbb83c3da5c5eef9"}},{"ruleId":"D1","level":"warning","message":{"text":"FFBrowserContext.initialize (cyclomatic 18): FFBrowserContext.initialize has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/firefox/ffBrowser.ts"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"696dd1a29f2380e497901fff1ebd413a690f6d7a44023ccb0d3a1233a9e53178"}},{"ruleId":"D1","level":"warning","message":{"text":"WKPage._onConsoleMessage (cyclomatic 18): WKPage._onConsoleMessage has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/wkPage.ts"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ebb3b06a73c8da870f443ad0fcef5ea7715f84e8b59693612a3e22165b0393"}},{"ruleId":"D1","level":"warning","message":{"text":"program.decorateMCPCommand (cyclomatic 18): program.decorateMCPCommand has cyclomatic complexity 18 (threshold 15). Most of this is not in the body itself: 1 of the 18 points is its own statement and the rest belongs to 5 function literals inside it that branch (lines 113, 164, 88, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/mcp/program.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"443aa9ceb880c409be2856da5d185d8a71977c2024fd5744f80ff027e4655301"}},{"ruleId":"D1","level":"warning","message":{"text":"callTab.parseSerializedValue (cyclomatic 18): callTab.parseSerializedValue has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/callTab.tsx"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e97772ab2f7616a975c0e6de70f21a48aaf93066df4ab71de9cbd32b9d1510d"}},{"ruleId":"D1","level":"warning","message":{"text":"consoleTab.ConsoleTab (cyclomatic 18): consoleTab.ConsoleTab has cyclomatic complexity 18 (threshold 15). Most of this is not in the body itself: 2 of the 18 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 177, 173). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/consoleTab.tsx"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b38a5bd62ecb0f47edd87eaa17aefdc176637fbbe7cf1d6e086cfcfe6550ef0"}},{"ruleId":"D1","level":"warning","message":{"text":"ariaModeView.collectAriaModeTargets (cyclomatic 18): ariaModeView.collectAriaModeTargets has cyclomatic complexity 18 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/ariaModeView.tsx"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"dff996ac36a6d58e56b529ec532d3302fca2d8ceb97578638b829c50a8b6f0d7"}},{"ruleId":"D1","level":"warning","message":{"text":"snapshotTab.InspectModeController (cyclomatic 18): snapshotTab.InspectModeController has cyclomatic complexity 18 (threshold 15). Most of this is not in the body itself: 1 of the 18 points is its own statement and the rest belongs to one function literal inside it that branches (line 292). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/snapshotTab.tsx"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"85a6b8b145373590c6d8ef763b32326ba765d1c2f082aa89ed8165855375538e"}},{"ruleId":"D1","level":"warning","message":{"text":"socksProxy.parsePattern (cyclomatic 18): socksProxy.parsePattern has cyclomatic complexity 18 (threshold 15). Most of this is not in the body itself: 2 of the 18 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 338, 347, 366, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/socksProxy.ts"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"a97c4c378ff83443fb686606f891f24376bab2406c1643ef71ccf1d0b8c51ea1"}},{"ruleId":"D1","level":"warning","message":{"text":"generateDotnetApi.renderMember (cyclomatic 18): generateDotnetApi.renderMember has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"295044695c1a423112d5a6666a6e65e46ffb3ad194bad5b443849c154735eba3"}},{"ruleId":"D1","level":"warning","message":{"text":"patchLinksInText (cyclomatic 18): patchLinksInText has cyclomatic complexity 18 (threshold 15). Most of this is not in the body itself: 1 of the 18 points is its own statement and the rest belongs to 5 function literals inside it that branch (lines 752, 802, 784, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/documentation.js"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b5757af866c3bc7f5836c0225ac8f3eb8cd4d8147e203dd156b2c77e8bfdab7"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorUtils.matchesAttributePart (cyclomatic 17): selectorUtils.matchesAttributePart has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorUtils.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"45a0816cbbc7d525ad3ff96fa936516db08cf01b7fb2bb22dc3eb9fe95bc0dc1"}},{"ruleId":"D1","level":"warning","message":{"text":"selectorUtils.elementText (cyclomatic 17): selectorUtils.elementText has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorUtils.ts"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"645c05e399d7c9bfeab8c7e52048731e0b4c270083e3ada263bb2a8b3096acd0"}},{"ruleId":"D1","level":"warning","message":{"text":"InjectedScript.querySelectorAll (cyclomatic 17): InjectedScript.querySelectorAll has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ef3a42d230ee884bd7b73b255a53dee6aa1f81807c3bbf53ec0ea0b9f95a8fc"}},{"ruleId":"D1","level":"warning","message":{"text":"traceModel.adjustMonotonicTime (cyclomatic 17): traceModel.adjustMonotonicTime has cyclomatic complexity 17 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceModel.ts"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"a264f16f8265abb09e73ae2ca609ef4ba4ae92bda765328a7f79b6ff888aa372"}},{"ruleId":"D1","level":"warning","message":{"text":"WebSocketTransport._connect (cyclomatic 17): WebSocketTransport._connect has cyclomatic complexity 17 (threshold 15). Most of this is not in the body itself: 6 of the 17 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 96, 109, 121). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/transport.ts"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"35ca5bfb9a85a1418da7a89182e3656151567ce318d3f66f61d062f5d9ca3d90"}},{"ruleId":"D1","level":"warning","message":{"text":"Frame.gotoImpl (cyclomatic 17): Frame.gotoImpl has cyclomatic complexity 17 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e5c6f29bf941ea5f33d53febfb12dfaeb6fc54829831ccfd0c4a50e90e4fdfc"}},{"ruleId":"D1","level":"warning","message":{"text":"WKPage._initializeSessionMayThrow (cyclomatic 17): WKPage._initializeSessionMayThrow has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/wkPage.ts"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"a463b347a7e9827bc8ab88bbee350d38cda5e873fd408f6edb901541f8c6cb6a"}},{"ruleId":"D1","level":"warning","message":{"text":"localUtils.zip (cyclomatic 17): localUtils.zip has cyclomatic complexity 17 (threshold 15). Of this number, 11 points are the body\u0027s own statements and 6 belong to 3 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/localUtils.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9a5359702d1444f7f6c78b6a1dd3c669605c9abfbd352b3b35aa61bf91e0fee"}},{"ruleId":"D1","level":"warning","message":{"text":"Connection.dispatch (cyclomatic 17): Connection.dispatch has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/connection.ts"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"192ca047982547669896554ff9a0a04143336ef1145d0fa331730976c04bbc37"}},{"ruleId":"D1","level":"warning","message":{"text":"treeView.TreeItemHeader (cyclomatic 17): treeView.TreeItemHeader has cyclomatic complexity 17 (threshold 15). Of this number, 14 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/treeView.tsx"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fedfd14fbd632b437708f26c61e48eced234102b47debf54ba1dc8ce5dcf1ee"}},{"ruleId":"D1","level":"warning","message":{"text":"Type.fromParsedType (cyclomatic 17): Type.fromParsedType has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions. This is NOT this file\u0027s highest cyclomatic complexity: documentation.patchLinksInText (cyclomatic 18) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/documentation.js"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"06f5e7b9d02204adca166128aab9e5cc18d482a4b9cb0905b66e2f30348a0d32"}},{"ruleId":"D1","level":"warning","message":{"text":"ApiParser.parseArgument (cyclomatic 17): ApiParser.parseArgument has cyclomatic complexity 17 (threshold 15). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/api_parser.js"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac57f1b4784b22eefb55983d15871273a4836d2de6c12b77c6b835ce38aa3940"}},{"ruleId":"D1","level":"warning","message":{"text":"generate_dotnet_channels.processCustomType (cyclomatic 17): generate_dotnet_channels.processCustomType has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_dotnet_channels.js"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0e6723c19c237f6fd86f6be3a7bd88ef843d999718bbdb1dd48d8f39e5e0546"}},{"ruleId":"D1","level":"warning","message":{"text":"create::AwaitExpression (cyclomatic 17): create::AwaitExpression has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/eslint-plugin-progress/index.js"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed56fcd9c3cb7b355227f6ea163d54340f7bfe5a7c42a3035296d97572c055e3"}},{"ruleId":"D1","level":"warning","message":{"text":"renderMethod::processArg (cyclomatic 17): renderMethod::processArg has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e81f9a17a980a790762a1d66b4940d838e97dd87e9d0e468fc35db125a87a84"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutionContext.evaluateFunction (cyclomatic 16): ExecutionContext.evaluateFunction has cyclomatic complexity 16 (threshold 15). Of this number, 10 points are the body\u0027s own statements and 6 belong to one function literal inside it that branches. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/content/Runtime.js"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"36cd8de7bba6ee39e4da3d975e08f4c0ee30e55aeb44f4cb47f5b0fa19f3aab8"}},{"ruleId":"D1","level":"warning","message":{"text":"PageHandler.[\u0027Page.dispatchMouseEvent\u0027] (cyclomatic 16): PageHandler.[\u0027Page.dispatchMouseEvent\u0027] has cyclomatic complexity 16 (threshold 15). Most of this is not in the body itself: 1 of the 16 points is its own statement and the rest belongs to 2 function literals inside it that branch (lines 524, 486). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/PageHandler.js"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"c177cf3ae23a73587e63108d6eca56e8d1a40403df199d1da4fb3510afd5554e"}},{"ruleId":"D1","level":"warning","message":{"text":"roleUtils.parseCSSContentPropertyAsString (cyclomatic 16): roleUtils.parseCSSContentPropertyAsString has cyclomatic complexity 16 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleUtils.ts"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"fce7645999be86151754493ef3316d224c6c3e59c4ed5d32445717bce95b83bd"}},{"ruleId":"D1","level":"warning","message":{"text":"cssTokenizer.escapeIdent (cyclomatic 16): cssTokenizer.escapeIdent has cyclomatic complexity 16 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/cssTokenizer.ts"},"region":{"startLine":892}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6e0a059ee5600e8f04b3f3180ae03e99cb5f086cbff415351e361bfc1aef8fb"}},{"ruleId":"D1","level":"warning","message":{"text":"JavaScriptLanguageGenerator.generateAction (cyclomatic 16): JavaScriptLanguageGenerator.generateAction has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/codegen/javascript.ts"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"af2fe9427a1364c39008cf82eded30942ad6ee3e15c4daa7b921215ddcc024e8"}},{"ruleId":"D1","level":"warning","message":{"text":"traceModel.mergeActionsAndUpdateTimingSameTrace (cyclomatic 16): traceModel.mergeActionsAndUpdateTimingSameTrace has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceModel.ts"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"57e1c269e0649f573d8f8690211747d1aef1f1a5ffeb156bf7233c4fb7a4ace9"}},{"ruleId":"D1","level":"warning","message":{"text":"EventEmitter.removeListener (cyclomatic 16): EventEmitter.removeListener has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/eventEmitter.ts"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bbcf0c9548072f7d00d37350aa4ec2473e67c2cc2711389f67acb3dc4060b97"}},{"ruleId":"D1","level":"warning","message":{"text":"dependencies.validateDependenciesLinux (cyclomatic 16): dependencies.validateDependenciesLinux has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/registry/dependencies.ts"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff9f1648afb60bf880b96295dbb01333d1eacdffa00ca9c24b8f2c5e1bd6d6ca"}},{"ruleId":"D1","level":"warning","message":{"text":"FrameSelectors._queryFrames (cyclomatic 16): FrameSelectors._queryFrames has cyclomatic complexity 16 (threshold 15). Most of this is not in the body itself: 4 of the 16 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 189, 187, 216). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frameSelectors.ts"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb8d703f876a8f2aa006aa75a0548c6a60c2df26383541e5c6e0d8bc70f98bed"}},{"ruleId":"D1","level":"warning","message":{"text":"HarTracer._onResponse (cyclomatic 16): HarTracer._onResponse has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/har/harTracer.ts"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"d51a3b17d41c8f3e8fc8b1b325793cab937a83ec5ff80c05c8252c3067c235c5"}},{"ruleId":"D1","level":"warning","message":{"text":"input.buildLayoutClosure (cyclomatic 16): input.buildLayoutClosure has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/input.ts"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"565a8ecc66027604cba25d76be5be6bd9aa5aa2c5efe885bf98a22cb2f64fb16"}},{"ruleId":"D1","level":"warning","message":{"text":"CRBrowser._onAttachedToTarget (cyclomatic 16): CRBrowser._onAttachedToTarget has cyclomatic complexity 16 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crBrowser.ts"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ef5e73827f1589349da66ca239b21fe40e12648fc20d64305225aca539b6acf"}},{"ruleId":"D1","level":"warning","message":{"text":"BidiChromium._innerDefaultArgs (cyclomatic 16): BidiChromium._innerDefaultArgs has cyclomatic complexity 16 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiChromium.ts"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"6522e770a1bc0502fde69d4b9e33a8e742bd0f0864ae6eacfcc8d32a3058c457"}},{"ruleId":"D1","level":"warning","message":{"text":"Connection.sendMessageToServer (cyclomatic 16): Connection.sendMessageToServer has cyclomatic complexity 16 (threshold 15). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/connection.ts"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"b11bd300588aa2cc2b07baae7bf5860b48716fc35fda06189e45ff0ef07f21a3"}},{"ruleId":"D1","level":"warning","message":{"text":"installActions.installBrowsers (cyclomatic 16): installActions.installBrowsers has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/cli/installActions.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"7be7adc830c4b4d90365639d92dad5e33af804b024a2a69dccf70906947cb763"}},{"ruleId":"D1","level":"warning","message":{"text":"Session.startDaemon (cyclomatic 16): Session.startDaemon has cyclomatic complexity 16 (threshold 15). Of this number, 12 points are the body\u0027s own statements and 4 belong to 2 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/session.ts"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b4ea0379763938b7f07763ba9afbabe6cd1819c3dadd8b384cc19560d578db"}},{"ruleId":"D1","level":"warning","message":{"text":"snapshotTab.collectSnapshots (cyclomatic 16): snapshotTab.collectSnapshots has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/snapshotTab.tsx"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b3d61c181d64128523a3f3dcca1862f3b6836edf37174adec3534a4eb5fa5a7"}},{"ruleId":"D1","level":"warning","message":{"text":"compare.compare (cyclomatic 16): compare.compare has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/image_tools/compare.ts"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"39640f477f6ad3f904338a86e6c260160b34bb011433c8b9a91d5586e3dfc01d"}},{"ruleId":"D1","level":"warning","message":{"text":"Member.filterForLanguage (cyclomatic 16): Member.filterForLanguage has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions. This is NOT this file\u0027s highest cyclomatic complexity: documentation.patchLinksInText (cyclomatic 18) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/documentation.js"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"982a215434fc121a45e043359d8dde5fb43b20a350b81894e771cd4050d6c16a"}},{"ruleId":"D1","level":"warning","message":{"text":"generate_channels.inlineType (cyclomatic 16): generate_channels.inlineType has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_channels.js"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fd48ef869499a6575150bf24951bb7900d65cee8a220eb0616c9b260a0c8730"}},{"ruleId":"D1","level":"warning","message":{"text":"TypesGenerator.generateTypes (cyclomatic 16): TypesGenerator.generateTypes has cyclomatic complexity 16 (threshold 15). Most of this is not in the body itself: 2 of the 16 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 95, 114, 87, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_types/index.js"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"8076b19d09148ab08f6ea6ce50df4e27c400e3645481a7ee684a650bc84ae000"}},{"ruleId":"D1","level":"warning","message":{"text":"validate_deps.isEntryUsed (cyclomatic 16): validate_deps.isEntryUsed has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/validate_deps.js"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"f85d03d6544a7d98dce7e69d39b9a2d55c8863213d4f3b424cdb662f2a53bc05"}},{"ruleId":"D1","level":"warning","message":{"text":"applyTemplates::visit (cyclomatic 16): applyTemplates::visit has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/api_parser.js"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"a393be69c79f32abb3cd55c509b8c51d67836ddd3d88fda61981f3fda53e8f2d"}},{"ruleId":"D1","level":"warning","message":{"text":"(computed) (cyclomatic 16): (computed) has cyclomatic complexity 16 (threshold 15). Most of this is not in the body itself: 1 of the 16 points is its own statement and the rest belongs to 3 function items inside it that branch ((anonymous), sendEvents, sendEvents::(anonymous)). Those helpers are already separate functions, so extracting the branching again is not available. To reduce it, move them out of the body to the enclosing scope, where each is measured, reviewed and tested on its own, and reduce whichever one then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/PageHandler.js"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"959524200b145cb1af9e47966fe87541e8ec6dde37c4d0b56c04102d2cba7aa6"}},{"ruleId":"D2","level":"warning","message":{"text":"generate_channels.generateChannels (cognitive 239): generate_channels.generateChannels has cognitive complexity 239 (threshold 15). Drivers by points: if/else 24 (95 pts), ternaries 16 (73 pts), loops 15 (46 pts), boolean chains 25 (nesting depth added 159). 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":"utils/generate_channels.js"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1d2b69be3e1166aa1ac5696f905a3adbf5a3a602b4ac523f8e3b5a99116ac7a"}},{"ruleId":"D2","level":"warning","message":{"text":"roleUtils.getTextAlternativeInternal (cognitive 228): roleUtils.getTextAlternativeInternal has cognitive complexity 228 (threshold 15). Drivers by points: if/else 58 (149 pts), boolean chains 59, loops 4 (12 pts), ternaries 3 (8 pts) (nesting depth added 104). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleUtils.ts"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"442c23dd4598781df3c7cc35a9a373d929feb02cb1d303db07786befc7be7669"}},{"ruleId":"D2","level":"warning","message":{"text":"cssTokenizer.tokenize (cognitive 210): cssTokenizer.tokenize has cognitive complexity 210 (threshold 15). Drivers by points: if/else 125 (160 pts), boolean chains 25, loops 16 (25 pts) (nesting depth added 44). Most of this is not in the body itself: 3 of the 210 points are its own statements and the rest belongs to 18 function literals inside it that branch (lines 143, 342, 470, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/cssTokenizer.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f25206b8da39ce36954c399f33e2c34f79e3276ee5687971016fb31b5b847fd"}},{"ruleId":"D2","level":"warning","message":{"text":"snapshotterInjected.frameSnapshotStreamer (cognitive 179): snapshotterInjected.frameSnapshotStreamer has cognitive complexity 179 (threshold 15). Drivers by points: if/else 80 (108 pts), boolean chains 38, ternaries 9 (17 pts), loops 8 (10 pts), error handling 4 (6 pts) (nesting depth added 40). Of this number, 43 points are the body\u0027s own statements and 136 belong to 12 function literals inside it that branch. 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":"packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"81b748776a18ee8c825caf95d048d8f1413ca7cf5d19a167cc72dee14179b762"}},{"ruleId":"D2","level":"warning","message":{"text":"Streamer.captureSnapshot (cognitive 135): Streamer.captureSnapshot has cognitive complexity 135 (threshold 15). Drivers by points: if/else 55 (81 pts), boolean chains 33, ternaries 7 (15 pts), loops 4 (6 pts) (nesting depth added 36). Most of this is not in the body itself: 10 of the 135 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 384, 455, 464, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"76f09bceed42096cd36e598cb33c9cdbb03bf76e99a1d1a7208d0481716ce88e"}},{"ruleId":"D2","level":"warning","message":{"text":"check_deps.innerCheckDeps (cognitive 131): check_deps.innerCheckDeps has cognitive complexity 131 (threshold 15). Drivers by points: if/else 43 (81 pts), loops 11 (23 pts), boolean chains 16, ternaries 4 (7 pts), error handling 2 (4 pts) (nesting depth added 55). Of this number, 130 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"utils/check_deps.js"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"59f657b198e2142aa4c837a084b3994e87d923e4c16c795d54b27e510befab7a"}},{"ruleId":"D2","level":"warning","message":{"text":"locatorGenerators.innerAsLocators (cognitive 113): locatorGenerators.innerAsLocators has cognitive complexity 113 (threshold 15). Drivers by points: if/else 37 (93 pts), ternaries 3 (10 pts), boolean chains 6, loops 2 (4 pts) (nesting depth added 65). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea484a95eced061e063971b7621ac88306f09af89e95d8afcbe05a7fda00c8d"}},{"ruleId":"D2","level":"warning","message":{"text":"dashboard_compressed_v1.compressReports (cognitive 109): dashboard_compressed_v1.compressReports has cognitive complexity 109 (threshold 15). Drivers by points: if/else 18 (71 pts), loops 6 (17 pts), boolean chains 11, ternaries 2 (10 pts) (nesting depth added 72). 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":"utils/flakiness-dashboard/processing/dashboard_compressed_v1.js"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"13070e65f15624dc3c1330461a4032f83b85de1b1e95f02873badcaad9a84931"}},{"ruleId":"D2","level":"warning","message":{"text":"run (cognitive 97): run has cognitive complexity 97 (threshold 15). Drivers by points: if/else 20 (55 pts), loops 11 (28 pts), boolean chains 6, ternaries 1 (4 pts), error handling 1 (2 pts), match/switch 1 (2 pts) (nesting depth added 57). Of this number, 60 points are the body\u0027s own statements and 37 belong to 12 function literals inside it that branch. 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":"utils/doclint/cli.js"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9837a8db8da3cdf9d6d56cb1f8432aad10b2b640a94079fc32a486582e87039"}},{"ruleId":"D2","level":"warning","message":{"text":"generateDotnetApi.renderMethod (cognitive 87): generateDotnetApi.renderMethod has cognitive complexity 87 (threshold 15). Drivers by points: if/else 39 (67 pts), boolean chains 11, ternaries 4 (5 pts), loops 2 (4 pts) (nesting depth added 31). Of this number, 58 points are the body\u0027s own statements and 29 belong to 4 function literals inside it that branch. 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":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"efc7cded319d30fe46da092b534a3e798948c4430a747e7632ab7c0c9dcae39e"}},{"ruleId":"D2","level":"warning","message":{"text":"uiModeView.UIModeView (cognitive 85): uiModeView.UIModeView has cognitive complexity 85 (threshold 15). Drivers by points: if/else 30 (38 pts), boolean chains 30, loops 7 (10 pts), ternaries 7 (nesting depth added 11). Of this number, 18 points are the body\u0027s own statements and 67 belong to 19 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/uiModeView.tsx"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"a16714c0aab44db691b0be7d850d09bb4ec7e4907c5bd1481d831308aaf019a7"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorParser.parseAttributeSelector (cognitive 77): selectorParser.parseAttributeSelector has cognitive complexity 77 (threshold 15). Drivers by points: if/else 33 (45 pts), boolean chains 22, loops 8 (9 pts), error handling 1 (nesting depth added 13). Of this number, 75 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. 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":"packages/isomorphic/selectorParser.ts"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"a99ce67ce1844d21f1657541c7c0e394849d205b704ee831dc75a866acf7f0c8"}},{"ruleId":"D2","level":"warning","message":{"text":"cssParser.parseCSS (cognitive 76): cssParser.parseCSS has cognitive complexity 76 (threshold 15). Drivers by points: if/else 33 (55 pts), boolean chains 12, loops 6 (8 pts), error handling 1 (nesting depth added 24). Of this number, 75 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"packages/isomorphic/cssParser.ts"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"195ad4c21b394aac2b6c7056cd0d2b65694ab605789abc223423aa78177d1ac1"}},{"ruleId":"D2","level":"warning","message":{"text":"SnapshotRenderer.render (cognitive 74): SnapshotRenderer.render has cognitive complexity 74 (threshold 15). Drivers by points: if/else 19 (44 pts), boolean chains 20, ternaries 3 (6 pts), loops 2 (4 pts) (nesting depth added 30). Most of this is not in the body itself: 0 of the 74 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 89, 195). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/snapshotRenderer.ts"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"87e3c7e6ef1aab955af72faf83d9e03a859fbe7393bf0c2d7f174ed723545d3e"}},{"ruleId":"D2","level":"warning","message":{"text":"APIRequestContext._sendRequest (cognitive 74): APIRequestContext._sendRequest has cognitive complexity 74 (threshold 15). Drivers by points: if/else 25 (33 pts), boolean chains 20, ternaries 13, error handling 2 (5 pts), loops 2 (3 pts) (nesting depth added 12). Most of this is not in the body itself: 3 of the 74 points are its own statements and the rest belongs to 13 function literals inside it that branch (lines 392, 396, 353, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/fetch.ts"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"fba1453e6ab3f6f45e4d79926d0e83442232e3b5cae426b370cd78386af691f0"}},{"ruleId":"D2","level":"warning","message":{"text":"minimist.minimist (cognitive 74): minimist.minimist has cognitive complexity 74 (threshold 15). Drivers by points: if/else 23 (45 pts), ternaries 3 (14 pts), boolean chains 8, loops 5 (7 pts) (nesting depth added 35). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/minimist.ts"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eb9870ab24187c53074a2c64f678bf3bd46d6573f5f5dadf4118288705a2534"}},{"ruleId":"D2","level":"warning","message":{"text":"program.program (cognitive 71): program.program has cognitive complexity 71 (threshold 15). Drivers by points: if/else 25 (46 pts), ternaries 8 (15 pts), boolean chains 7, loops 1 (2 pts), match/switch 1 (nesting depth added 29). Of this number, 67 points are the body\u0027s own statements and 4 belong to 2 function literals inside it that branch. 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":"packages/playwright-core/src/tools/cli-client/program.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dac3e09d7a6e1c3ee3df4eb3b22b4c14e87d67a266ddc66a955b1720fba51fd"}},{"ruleId":"D2","level":"warning","message":{"text":"annotations.Annotations (cognitive 69): annotations.Annotations has cognitive complexity 69 (threshold 15). Drivers by points: if/else 35 (44 pts), boolean chains 16, ternaries 7 (8 pts), loops 1 (nesting depth added 10). Of this number, 46 points are the body\u0027s own statements and 23 belong to 18 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/annotations.tsx"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"d16cf766d0e15ac08f3688f77811a89634b706ce8fdbbb60d9075189b2164dec"}},{"ruleId":"D2","level":"warning","message":{"text":"ariaSnapshot.generateAriaTree (cognitive 69): ariaSnapshot.generateAriaTree has cognitive complexity 69 (threshold 15). Drivers by points: if/else 25 (37 pts), boolean chains 17, loops 6 (12 pts), ternaries 3 (nesting depth added 18). Of this number, 29 points are the body\u0027s own statements and 40 belong to one function literal inside it that branches. 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":"packages/injected/src/ariaSnapshot.ts"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6bdec5a2acaeb013d34e78d8b7b79eaa345a6ef93f6fa9bb4b58acd83c9bfc8"}},{"ruleId":"D2","level":"warning","message":{"text":"generateDotnetApi.translateType (cognitive 68): generateDotnetApi.translateType has cognitive complexity 68 (threshold 15). Drivers by points: if/else 29 (50 pts), ternaries 5 (10 pts), boolean chains 8 (nesting depth added 26). 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":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"8600740a62bb73ffec727df7905ebafb6a3515a3b7f49c8218f06cfae598d657"}},{"ruleId":"D2","level":"warning","message":{"text":"utilityScriptSerializers.parseEvaluationResultValue (cognitive 67): utilityScriptSerializers.parseEvaluationResultValue has cognitive complexity 67 (threshold 15). Drivers by points: if/else 24 (54 pts), loops 4 (12 pts), boolean chains 1 (nesting depth added 38). 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":"packages/isomorphic/utilityScriptSerializers.ts"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"a019bc2c0f97e4d770bf1473ea3404fdea8f21ec0fafaeb8ba7b7626bde23d86"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectedScript.expectSingleElement (cognitive 63): InjectedScript.expectSingleElement has cognitive complexity 63 (threshold 15). Drivers by points: if/else 42 (54 pts), boolean chains 7, loops 1 (2 pts) (nesting depth added 13). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1518}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c24268e3484b0b227f6f20293c886cdd9c679c54561b7a70f89c7f505fd3e77"}},{"ruleId":"D2","level":"warning","message":{"text":"utilityScriptSerializers.innerSerialize (cognitive 62): utilityScriptSerializers.innerSerialize has cognitive complexity 62 (threshold 15). Drivers by points: if/else 33 (43 pts), loops 5 (9 pts), boolean chains 5, error handling 2 (5 pts) (nesting depth added 17). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/utilityScriptSerializers.ts"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"741be07d5a2f3d6534e57a3601662b4b1ccf36f736cca52063c93ecccea90d31"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorGenerator.buildTextCandidates (cognitive 61): selectorGenerator.buildTextCandidates has cognitive complexity 61 (threshold 15). Drivers by points: if/else 14 (27 pts), loops 7 (21 pts), boolean chains 7, ternaries 4 (6 pts) (nesting depth added 29). 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":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"1caa2dbc05b610472793d1cb85182b374779fa5722205e9204ffa058d0d90111"}},{"ruleId":"D2","level":"warning","message":{"text":"ariaSnapshot.parseAriaSnapshot (cognitive 61): ariaSnapshot.parseAriaSnapshot has cognitive complexity 61 (threshold 15). Drivers by points: if/else 19 (38 pts), boolean chains 19, loops 2, ternaries 1 (2 pts) (nesting depth added 20). Most of this is not in the body itself: 9 of the 61 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 175, 152). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/ariaSnapshot.ts"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"4efadb9eea9de5e22bedfc61ae61977430cd59337ca0169c0d26ea0d4fc4a316"}},{"ruleId":"D2","level":"warning","message":{"text":"dashboard.Dashboard (cognitive 60): dashboard.Dashboard has cognitive complexity 60 (threshold 15). Drivers by points: if/else 26 (27 pts), boolean chains 20, ternaries 12 (13 pts) (nesting depth added 2). Of this number, 44 points are the body\u0027s own statements and 16 belong to 13 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/dashboard.tsx"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"585fb54e5f08d872ac8a2747f83af3272d9104e565b39b44978642ad60b9ce98"}},{"ruleId":"D2","level":"warning","message":{"text":"ariaSnapshotRenderer.renderAriaSnapshotAsYaml (cognitive 60): ariaSnapshotRenderer.renderAriaSnapshotAsYaml has cognitive complexity 60 (threshold 15). Drivers by points: if/else 30 (37 pts), ternaries 4 (10 pts), boolean chains 7, loops 3 (6 pts) (nesting depth added 16). Most of this is not in the body itself: 3 of the 60 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 83, 38, 32). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/ariaSnapshotRenderer.ts"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcdd5e8f61d761f3fa2e2bd4883025bffcbc3211638e66d0abdbc2ed82298a32"}},{"ruleId":"D2","level":"warning","message":{"text":"snapshotRenderer.snapshotScript (cognitive 60): snapshotRenderer.snapshotScript has cognitive complexity 60 (threshold 15). Drivers by points: if/else 14 (22 pts), loops 19 (22 pts), boolean chains 8, error handling 2 (4 pts), ternaries 2 (4 pts) (nesting depth added 15). Most of this is not in the body itself: 2 of the 60 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 357, 473, 553, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/snapshotRenderer.ts"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ee5dc3e5f0450c9101221809f9c145a8fc58effaef02ccd11ad67e38945ae38"}},{"ruleId":"D2","level":"warning","message":{"text":"hostPlatform.calculatePlatform (cognitive 59): hostPlatform.calculatePlatform has cognitive complexity 59 (threshold 15). Drivers by points: if/else 25 (53 pts), boolean chains 6 (nesting depth added 28). 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":"packages/utils/hostPlatform.ts"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"c74b6523b6bb710becc218166f02e5fe91ec7c8002a4574240818b976f739efc"}},{"ruleId":"D2","level":"warning","message":{"text":"webSocketMock.inject (cognitive 57): webSocketMock.inject has cognitive complexity 57 (threshold 15). Drivers by points: if/else 42 (43 pts), boolean chains 8, ternaries 3 (4 pts), loops 2 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/webSocketMock.ts"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"623a93755c56b53da00e256698a9aa85399e1a7dd2cdf8440911d39ebc6918b1"}},{"ruleId":"D2","level":"warning","message":{"text":"markdown.buildTree (cognitive 57): markdown.buildTree has cognitive complexity 57 (threshold 15). Drivers by points: if/else 17 (40 pts), loops 6 (14 pts), boolean chains 2, ternaries 1 (nesting depth added 31). Of this number, 52 points are the body\u0027s own statements and 5 belong to one function literal inside it that branches. 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":"utils/markdown.js"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"508fb73e533915fc84e98d5418739e702f84cd131b19b2aa6cc725794359fed5"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameSession._initialize (cognitive 54): FrameSession._initialize has cognitive complexity 54 (threshold 15). Drivers by points: if/else 22 (36 pts), boolean chains 9, loops 4 (6 pts), error handling 1 (2 pts), ternaries 1 (nesting depth added 17). Of this number, 45 points are the body\u0027s own statements and 9 belong to one function literal inside it that branches. 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":"packages/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6862692da438eb342f5d0b251839e13053b60dc8631db8a387233d5f2c2c3b7"}},{"ruleId":"D2","level":"warning","message":{"text":"consoleTab.useConsoleTabModel (cognitive 54): consoleTab.useConsoleTabModel has cognitive complexity 54 (threshold 15). Drivers by points: if/else 11 (22 pts), ternaries 7 (18 pts), boolean chains 13, loops 1 (nesting depth added 22). Most of this is not in the body itself: 0 of the 54 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 65, 68, 87, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/consoleTab.tsx"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"58138fead6352efb9f9632f06182d52b2572ffb2aea3b9a4578b512ffec3abad"}},{"ruleId":"D2","level":"warning","message":{"text":"innerCheckDeps::visit (cognitive 54): innerCheckDeps::visit has cognitive complexity 54 (threshold 15). Drivers by points: if/else 20 (46 pts), boolean chains 4, loops 1 (2 pts), ternaries 1 (2 pts) (nesting depth added 28). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/check_deps.js"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"bef601c04048f7602c8535a815cc122c8a99e5947c9fbdd88f2d9fc67a75508f"}},{"ruleId":"D2","level":"warning","message":{"text":"APIRequestContext._innerFetch (cognitive 53): APIRequestContext._innerFetch has cognitive complexity 53 (threshold 15). Drivers by points: if/else 20 (31 pts), boolean chains 10, loops 3 (9 pts), ternaries 3 (nesting depth added 17). Most of this is not in the body itself: 0 of the 53 points are its own statements and the rest belongs to one function literal inside it that branches (line 180). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/fetch.ts"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbc125eef26629a7462657e77aa9e4d2cd3722d8ce74a7295fcbad8c08fdcfcd"}},{"ruleId":"D2","level":"warning","message":{"text":"ElementHandle._performPointerAction (cognitive 53): ElementHandle._performPointerAction has cognitive complexity 53 (threshold 15). Drivers by points: if/else 25 (36 pts), ternaries 8 (14 pts), boolean chains 3 (nesting depth added 17). Of this number, 36 points are the body\u0027s own statements and 17 belong to 3 function literals inside it that branch. 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":"packages/playwright-core/src/server/dom.ts"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f07a65b5e3e2f2147b03f4e768dbd87d3dfa866703adea94a48219deb4682bd"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectorEvaluatorImpl._matchesParents (cognitive 51): SelectorEvaluatorImpl._matchesParents has cognitive complexity 51 (threshold 15). Drivers by points: if/else 17 (43 pts), loops 3 (6 pts), boolean chains 2 (nesting depth added 29). Most of this is not in the body itself: 1 of the 51 points is its own statement and the rest belongs to one function literal inside it that branches (line 268). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorEvaluator.ts"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"7122b42684938c7df1ab51dfa2371dd6a3f894395cb9104132562e4cda13b9fc"}},{"ruleId":"D2","level":"warning","message":{"text":"Response.serialize (cognitive 50): Response.serialize has cognitive complexity 50 (threshold 15). Drivers by points: if/else 13 (33 pts), ternaries 7 (12 pts), loops 2 (4 pts), boolean chains 1 (nesting depth added 27). 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":"packages/playwright-core/src/tools/backend/response.ts"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"c64d482abda91fd0505699d32a42d7c296ae8519a7d99aacb8c8b2728d1bcf5c"}},{"ruleId":"D2","level":"warning","message":{"text":"generateNameDefault (cognitive 50): generateNameDefault has cognitive complexity 50 (threshold 15). Drivers by points: if/else 12 (31 pts), boolean chains 11, loops 2 (6 pts), other 2 (nesting depth added 23). Of this number, 37 points are the body\u0027s own statements and 13 belong to 2 function items inside it that branch. To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4be56bd40282236f7db8b80104cb4f96806619e50f3f6ae5b4e00d3fc614a09"}},{"ruleId":"D2","level":"warning","message":{"text":"HarBackend._harFindResponse (cognitive 49): HarBackend._harFindResponse has cognitive complexity 49 (threshold 15). Drivers by points: if/else 11 (36 pts), boolean chains 7, loops 3 (6 pts) (nesting depth added 28). 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":"packages/playwright-core/src/server/harBackend.ts"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f97f9dddf732639f6851d5fca373e5112d31b75b6a8e8c5dc2c65f8dd99cae7"}},{"ruleId":"D2","level":"warning","message":{"text":"traceConsole.traceConsole (cognitive 49): traceConsole.traceConsole has cognitive complexity 49 (threshold 15). Drivers by points: if/else 14 (30 pts), ternaries 4 (9 pts), boolean chains 7, loops 3 (nesting depth added 21). 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":"packages/playwright-core/src/tools/trace/traceConsole.ts"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"c09eecb9851bc79e4d8af0ae9f8df906e88951cdb75fb8866200258fc5f37b52"}},{"ruleId":"D2","level":"warning","message":{"text":"Response._build (cognitive 48): Response._build has cognitive complexity 48 (threshold 15). Drivers by points: if/else 19 (29 pts), ternaries 6 (11 pts), boolean chains 6, loops 1 (2 pts) (nesting depth added 16). 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":"packages/playwright-core/src/tools/backend/response.ts"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"09c234fa9e141992b0fcf43f2cc3a6fee48171ac1792ee3699a3a6715099697a"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorGenerator.generateSelectorFor (cognitive 47): selectorGenerator.generateSelectorFor has cognitive complexity 47 (threshold 15). Drivers by points: if/else 13 (26 pts), boolean chains 10, ternaries 2 (6 pts), loops 4 (5 pts) (nesting depth added 18). Of this number, 44 points are the body\u0027s own statements and 3 belong to 2 function literals inside it that branch. 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":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"1575842abb71ebc84dec675f2c8517e86e5e2640bc365114e5cd937a24f9b0e2"}},{"ruleId":"D2","level":"warning","message":{"text":"jsonSchema.validate (cognitive 47): jsonSchema.validate has cognitive complexity 47 (threshold 15). Drivers by points: if/else 14 (28 pts), loops 4 (9 pts), boolean chains 7, ternaries 1 (3 pts) (nesting depth added 21). 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":"packages/isomorphic/jsonSchema.ts"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e4832a80f143d1602731b38ff252868bee2fd8981b947722455bc3849230bea"}},{"ruleId":"D2","level":"warning","message":{"text":"workbench.PartitionedWorkbench (cognitive 47): workbench.PartitionedWorkbench has cognitive complexity 47 (threshold 15). Drivers by points: if/else 18 (21 pts), boolean chains 16, ternaries 8, loops 1 (2 pts) (nesting depth added 4). Of this number, 22 points are the body\u0027s own statements and 25 belong to 10 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/workbench.tsx"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4f180f069a84fce747767435a768745839c1caf4a01d5174569f42863592048"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorUtils.elementText (cognitive 46): selectorUtils.elementText has cognitive complexity 46 (threshold 15). Drivers by points: if/else 12 (38 pts), boolean chains 4, loops 1 (4 pts) (nesting depth added 29). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorUtils.ts"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bde10d2d5bbe52ce38a441f4e222cf628777516d2e4a9880c0e50e729aefa94"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorParser.parseSelector (cognitive 46): selectorParser.parseSelector has cognitive complexity 46 (threshold 15). Drivers by points: if/else 10 (30 pts), boolean chains 6, ternaries 2 (6 pts), error handling 1 (3 pts), loops 1 (nesting depth added 26). Of this number, 45 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/selectorParser.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"f94b9955252ce601161484baaf7e7c411ba8e2fca19a55a556cf1877110b634b"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceModernizer._modernize_8_to_9 (cognitive 46): TraceModernizer._modernize_8_to_9 has cognitive complexity 46 (threshold 15). Drivers by points: if/else 12 (34 pts), loops 3 (7 pts), boolean chains 5 (nesting depth added 26). 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":"packages/isomorphic/trace/traceModernizer.ts"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a461f5a1f74288d8932e5a2edaae715934ed4ec4030a48269b34762e4892cf8"}},{"ruleId":"D2","level":"warning","message":{"text":"screenshotter.inPagePrepareForScreenshots (cognitive 46): screenshotter.inPagePrepareForScreenshots has cognitive complexity 46 (threshold 15). Drivers by points: if/else 11 (18 pts), loops 7 (13 pts), error handling 3 (11 pts), boolean chains 2, ternaries 1 (2 pts) (nesting depth added 22). Of this number, 16 points are the body\u0027s own statements and 30 belong to 5 function literals inside it that branch. 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":"packages/playwright-core/src/server/screenshotter.ts"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"6351bcccc8a6693dd777d5068cb2553a0ee73dc5ad1f3ee53ed8b4b210603fc7"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceLoader.load (cognitive 45): TraceLoader.load has cognitive complexity 45 (threshold 15). Drivers by points: if/else 9 (25 pts), loops 5 (12 pts), boolean chains 8 (nesting depth added 23). 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":"packages/isomorphic/trace/traceLoader.ts"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"156216b756770826714b2e498e484d21ff37a810284f2dcbcdee67fefb92a134"}},{"ruleId":"D2","level":"warning","message":{"text":"innerRenderMdNode (cognitive 45): innerRenderMdNode has cognitive complexity 45 (threshold 15). Drivers by points: if/else 12 (17 pts), boolean chains 11, loops 5 (10 pts), ternaries 2 (4 pts), match/switch 1 (2 pts), other 1 (nesting depth added 13). Of this number, 42 points are the body\u0027s own statements and 3 belong to one function item inside it that branches. 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":"utils/markdown.js"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e1deee315de5ef2a756943f98539d326b8a4bae0960472cc87ee458c9c45163"}},{"ruleId":"D2","level":"warning","message":{"text":"codeMirrorWrapper.CodeMirrorWrapper (cognitive 44): codeMirrorWrapper.CodeMirrorWrapper has cognitive complexity 44 (threshold 15). Drivers by points: if/else 14 (21 pts), boolean chains 13, loops 5 (10 pts) (nesting depth added 12). Most of this is not in the body itself: 0 of the 44 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 131, 79, 126, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/codeMirrorWrapper.tsx"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a69a53e03724e0154a0e53ffca660bacc69be1109ec884a78bc516a6354f2a4"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectedScript.elementState (cognitive 42): InjectedScript.elementState has cognitive complexity 42 (threshold 15). Drivers by points: ternaries 10 (21 pts), if/else 10 (14 pts), boolean chains 7 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":783}}}],"partialFingerprints":{"codehealthFindingId/v1":"6301618d6cda9187cd7223f3a0dbbaedef8a2e1187930b56c2c6ad2d296071b8"}},{"ruleId":"D2","level":"warning","message":{"text":"urlMatch.globToRegexPattern (cognitive 42): urlMatch.globToRegexPattern has cognitive complexity 42 (threshold 15). Drivers by points: if/else 12 (29 pts), ternaries 2 (6 pts), loops 2 (4 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 24). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/urlMatch.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2d84d9ef25e14a659e6f0095db7abd5caac8d778a2306b1bd861c171cb2033b"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorGenerator.buildNoTextCandidates (cognitive 41): selectorGenerator.buildNoTextCandidates has cognitive complexity 41 (threshold 15). Drivers by points: if/else 13 (21 pts), loops 7 (12 pts), boolean chains 8 (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":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbad4c36905bb6f9cc036a9586249ae4f960c750c599fe141726fed9f3287975"}},{"ruleId":"D2","level":"warning","message":{"text":"main.doFetch (cognitive 41): main.doFetch has cognitive complexity 41 (threshold 15). Drivers by points: if/else 21 (37 pts), boolean chains 3, ternaries 1 (nesting depth added 16). 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":"packages/trace-viewer/src/sw/main.ts"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"3749de196352fe780318d54016855c1f3ded79e3982bcfbb1f157779dfdb42e1"}},{"ruleId":"D2","level":"warning","message":{"text":"Filter.matches (cognitive 40): Filter.matches has cognitive complexity 40 (threshold 15). Drivers by points: if/else 14 (22 pts), ternaries 7 (16 pts), boolean chains 2 (nesting depth added 17). Of this number, 18 points are the body\u0027s own statements and 22 belong to 5 function literals inside it that branch. 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":"packages/html-reporter/src/filter.ts"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a88c97dcbed3de03807b18956866c47787b940b1282337104499162a6c552bd"}},{"ruleId":"D2","level":"warning","message":{"text":"Frame._expectInternal (cognitive 40): Frame._expectInternal has cognitive complexity 40 (threshold 15). Drivers by points: if/else 17 (25 pts), boolean chains 9, ternaries 3 (6 pts) (nesting depth added 11). Of this number, 33 points are the body\u0027s own statements and 7 belong to 2 function literals inside it that branch. 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":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":1530}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3e76327009908aafc6622bbc7fc0e132e0c2f018a536948f238fcdcee1963ac"}},{"ruleId":"D2","level":"warning","message":{"text":"ElementHandle._retryAction (cognitive 40): ElementHandle._retryAction has cognitive complexity 40 (threshold 15). Drivers by points: if/else 13 (30 pts), ternaries 2 (6 pts), boolean chains 3, loops 1 (nesting depth added 21). 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":"packages/playwright-core/src/server/dom.ts"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"9091dc50861079e655832e716a7ebb9481fa28b9f4b9bdcd3c0fb84c696bd09c"}},{"ruleId":"D2","level":"warning","message":{"text":"Page.expectScreenshot (cognitive 40): Page.expectScreenshot has cognitive complexity 40 (threshold 15). Drivers by points: if/else 16 (23 pts), boolean chains 9, ternaries 4 (6 pts), error handling 1, loops 1 (nesting depth added 9). Of this number, 33 points are the body\u0027s own statements and 7 belong to 4 function literals inside it that branch. 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":"packages/playwright-core/src/server/page.ts"},"region":{"startLine":717}}}],"partialFingerprints":{"codehealthFindingId/v1":"40ba9eb51b25fbb170741655629ed849afbc7e68b74c13ae1f0a40a0dbbc9368"}},{"ruleId":"D2","level":"warning","message":{"text":"treeView.TreeView (cognitive 40): treeView.TreeView has cognitive complexity 40 (threshold 15). Drivers by points: if/else 21 (27 pts), boolean chains 9, loops 2 (3 pts), ternaries 1 (nesting depth added 7). Most of this is not in the body itself: 3 of the 40 points are its own statements and the rest belongs to 8 function literals inside it that branch (lines 143, 107, 94, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/treeView.tsx"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"87f96be5d46853801adf47d0950c61676950951eb2d7869591e1c7371d40a36d"}},{"ruleId":"D2","level":"warning","message":{"text":"injectedScript.deepEquals (cognitive 39): injectedScript.deepEquals has cognitive complexity 39 (threshold 15). Drivers by points: if/else 13 (28 pts), loops 3 (7 pts), boolean chains 4 (nesting depth added 19). 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":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1877}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f39936d1cfccda195153968838eb81614b7ea7e34748f0f7bdca81406b6b502"}},{"ruleId":"D2","level":"warning","message":{"text":"CRNetworkManager._onRequest (cognitive 39): CRNetworkManager._onRequest has cognitive complexity 39 (threshold 15). Drivers by points: if/else 14 (20 pts), boolean chains 17, ternaries 2 (nesting depth added 6). 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":"packages/playwright-core/src/server/chromium/crNetworkManager.ts"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff4958f62f61bf648872d229e411969534dd9dbe6c1b849922bc9dad046050d3"}},{"ruleId":"D2","level":"warning","message":{"text":"traceRequests.traceRequest (cognitive 39): traceRequests.traceRequest has cognitive complexity 39 (threshold 15). Drivers by points: if/else 18 (23 pts), ternaries 6 (11 pts), loops 2 (4 pts), boolean chains 1 (nesting depth added 12). 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":"packages/playwright-core/src/tools/trace/traceRequests.ts"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"07643d07436463c5766b9fdda18662b0c1d58ea97c8a9b2bb98a03d854d331b3"}},{"ruleId":"D2","level":"warning","message":{"text":"serializers.innerParseSerializedValue (cognitive 39): serializers.innerParseSerializedValue has cognitive complexity 39 (threshold 15). Drivers by points: if/else 24 (31 pts), loops 4 (8 pts) (nesting depth added 11). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/protocol/src/serializers.ts"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ae3826a2bff83439522ca05e9b287bd29522fd8c7d316d7d88e292d178b292c"}},{"ruleId":"D2","level":"warning","message":{"text":"recorder.Recorder (cognitive 39): recorder.Recorder has cognitive complexity 39 (threshold 15). Drivers by points: boolean chains 16, if/else 9 (11 pts), ternaries 9 (10 pts), loops 1, match/switch 1 (nesting depth added 3). Most of this is not in the body itself: 12 of the 39 points are its own statements and the rest belongs to 13 function literals inside it that branch (lines 83, 112, 139, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/recorder/src/recorder.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dce6823e0131c2aab04f8f63eae05a64ed31c0a8c080c9201f95b72a06c2c41"}},{"ruleId":"D2","level":"warning","message":{"text":"build_deps_true.collectImports (cognitive 39): build_deps_true.collectImports has cognitive complexity 39 (threshold 15). Drivers by points: if/else 15 (34 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 20). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/build_deps_true.js"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f8ae69c05a2b1bb34e9a63429cbd04250a150f48415b5b2eed083d8c8515394"}},{"ruleId":"D2","level":"warning","message":{"text":"roleUtils.innerAccumulatedElementText (cognitive 38): roleUtils.innerAccumulatedElementText has cognitive complexity 38 (threshold 15). Drivers by points: loops 5 (15 pts), if/else 9 (13 pts), boolean chains 7, ternaries 2 (3 pts) (nesting depth added 15). Of this number, 26 points are the body\u0027s own statements and 12 belong to one function literal inside it that branches. 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":"packages/injected/src/roleUtils.ts"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"e495117fb7c39eb9d3bdef9b6e3b21fa53fa00b7c9b757bf518ed0ca3e42885f"}},{"ruleId":"D2","level":"warning","message":{"text":"roleSelectorEngine.queryRole (cognitive 38): roleSelectorEngine.queryRole has cognitive complexity 38 (threshold 15). Drivers by points: if/else 19 (27 pts), boolean chains 10, loops 1 (nesting depth added 8). Most of this is not in the body itself: 0 of the 38 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 145, 190). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleSelectorEngine.ts"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"9717d3e123d993f8eabbc36d6b320201ccbdd7a4bf14cb22ccb2816d3bf408b7"}},{"ruleId":"D2","level":"warning","message":{"text":"ariaSnapshot.renderAriaTreeAsJSON (cognitive 37): ariaSnapshot.renderAriaTreeAsJSON has cognitive complexity 37 (threshold 15). Drivers by points: if/else 21 (24 pts), boolean chains 10, ternaries 2, loops 1 (nesting depth added 3). Most of this is not in the body itself: 5 of the 37 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 468, 516). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/ariaSnapshot.ts"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"758b5e14fab0254da8e134bc791a34be967d19c6ef40924e2838d9cb2dc5e4c8"}},{"ruleId":"D2","level":"warning","message":{"text":"browserActions.launchContext (cognitive 37): browserActions.launchContext has cognitive complexity 37 (threshold 15). Drivers by points: if/else 25 (29 pts), error handling 2 (4 pts), boolean chains 2, ternaries 2 (nesting depth added 6). Of this number, 36 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/cli/browserActions.ts"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"c676a0a85b4c0b4a9e60cc71bf1745514319211e1a35d34cd422b40a7ae5e215"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameSelectors._callOnSelectorInternal (cognitive 36): FrameSelectors._callOnSelectorInternal has cognitive complexity 36 (threshold 15). Drivers by points: if/else 11 (21 pts), ternaries 4 (8 pts), boolean chains 6, loops 1 (nesting depth added 14). Most of this is not in the body itself: 13 of the 36 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 261, 258, 285). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frameSelectors.ts"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1e8a58cb922534a451391cc1ca31dd72817e158c3a0c18b6bf4ed7aac0944e7"}},{"ruleId":"D2","level":"warning","message":{"text":"generateDotnetApi.renderMember (cognitive 36): generateDotnetApi.renderMember has cognitive complexity 36 (threshold 15). Drivers by points: if/else 13 (25 pts), ternaries 2 (7 pts), boolean chains 2, loops 1 (2 pts) (nesting depth added 18). 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":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"3052bac5f20b2eca79ef47fb1760519a6a796470758ebeed9e5345e38eb4c0c4"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorGenerator.cssFallback (cognitive 35): selectorGenerator.cssFallback has cognitive complexity 35 (threshold 15). Drivers by points: if/else 11 (26 pts), ternaries 2 (4 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 18). 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":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"671f946749bd4b973eed0e98bde98b682d2518066bd93df97cc7066e4dfb1545"}},{"ruleId":"D2","level":"warning","message":{"text":"TextOutput.list (cognitive 35): TextOutput.list has cognitive complexity 35 (threshold 15). Drivers by points: if/else 11 (20 pts), loops 7 (13 pts), boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/output.ts"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"b401b3e9fdad43dcd3c7828c58bb5c30161827cf424e2f114a42f975f9ec6408"}},{"ruleId":"D2","level":"warning","message":{"text":"ariaSnapshot.matchesNode (cognitive 34): ariaSnapshot.matchesNode has cognitive complexity 34 (threshold 15). Drivers by points: boolean chains 19, if/else 15. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/ariaSnapshot.ts"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"307eda6818f5e46cfdf6e53768f407374499fb57f84d02a95993dc56bcf75fb6"}},{"ruleId":"D2","level":"warning","message":{"text":"serializers.innerSerializeValue (cognitive 34): serializers.innerSerializeValue has cognitive complexity 34 (threshold 15). Drivers by points: if/else 23, loops 4 (8 pts), boolean chains 3 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/protocol/src/serializers.ts"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"18a55dc18bdd1e500464b089da7bcf029672bfb17884f76f6e045b680be11859"}},{"ruleId":"D2","level":"warning","message":{"text":"timeline.Timeline (cognitive 34): timeline.Timeline has cognitive complexity 34 (threshold 15). Drivers by points: if/else 21 (24 pts), boolean chains 8, ternaries 2 (nesting depth added 3). Most of this is not in the body itself: 3 of the 34 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 90, 66, 135, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/timeline.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac96ceb9568ae2dac18614d28fc48cdc6de56cfd3a5b8fb86e3ce1a696ccaddd"}},{"ruleId":"D2","level":"warning","message":{"text":"workbenchLoader.WorkbenchLoader (cognitive 34): workbenchLoader.WorkbenchLoader has cognitive complexity 34 (threshold 15). Drivers by points: if/else 18 (20 pts), boolean chains 11, ternaries 2, loops 1 (nesting depth added 2). Most of this is not in the body itself: 10 of the 34 points are its own statements and the rest belongs to 11 function literals inside it that branch (lines 103, 148, 56, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/workbenchLoader.tsx"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"64c1d474e578b00fc2b8752a456444320e34b2696a37088c34f42876669ebd08"}},{"ruleId":"D2","level":"warning","message":{"text":"documentation.processCodeGroups (cognitive 34): documentation.processCodeGroups has cognitive complexity 34 (threshold 15). Drivers by points: if/else 8 (24 pts), loops 3 (6 pts), error handling 1 (3 pts), boolean chains 1 (nesting depth added 21). 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":"utils/doclint/documentation.js"},"region":{"startLine":908}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bb49e7cbdf64e6b5b91c3c02454d65991397826d6ad6481cadacd4e861bf0e3"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiConnection._dispatchMessage (cognitive 33): BidiConnection._dispatchMessage has cognitive complexity 33 (threshold 15). Drivers by points: if/else 13 (25 pts), loops 2 (5 pts), boolean chains 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiConnection.ts"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"285e4fd9b6ba06243200465554d521a5ef59bf59fbaea788613cc5b3f4acff44"}},{"ruleId":"D2","level":"warning","message":{"text":"WVPage._onConsoleMessage (cognitive 33): WVPage._onConsoleMessage has cognitive complexity 33 (threshold 15). Drivers by points: if/else 12 (19 pts), boolean chains 13, loops 1 (nesting depth added 7). 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":"packages/playwright-core/src/server/webkit/webview/wvPage.ts"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"f02967693767a9ff49e5070f81257e0d9dd952a73b4a692d9ab55cbc1f35c714"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiNetworkManager._onBeforeRequestSent (cognitive 32): BidiNetworkManager._onBeforeRequestSent has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12 (24 pts), boolean chains 4, ternaries 3 (4 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":"packages/playwright-core/src/server/bidi/bidiNetworkManager.ts"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"5154f84704f0191252563fd4545f98ce3d2243a12a10efd83d9c8066f014ae19"}},{"ruleId":"D2","level":"warning","message":{"text":"playbackControl.usePlayback (cognitive 32): playbackControl.usePlayback has cognitive complexity 32 (threshold 15). Drivers by points: if/else 15 (16 pts), boolean chains 8, ternaries 7, loops 1 (nesting depth added 1). Most of this is not in the body itself: 10 of the 32 points are its own statements and the rest belongs to 11 function literals inside it that branch (lines 96, 150, 124, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/playbackControl.tsx"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"01ec361eebd1de2b671e3ebd9d4f61a5e10d570998e26130fb6f61db6c3f66f0"}},{"ruleId":"D2","level":"warning","message":{"text":"validate_deps.validateDirectory (cognitive 32): validate_deps.validateDirectory has cognitive complexity 32 (threshold 15). Drivers by points: loops 6 (16 pts), if/else 7 (15 pts), boolean chains 1 (nesting depth added 18). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/validate_deps.js"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5e9ae860dc5f5cabb5fea706b3434dd858ac3bb6e2ff71b5aac8db1523db6fc"}},{"ruleId":"D2","level":"warning","message":{"text":"patchLinksInText (cognitive 32): patchLinksInText has cognitive complexity 32 (threshold 15). Drivers by points: if/else 13 (26 pts), boolean chains 6 (nesting depth added 13). Most of this is not in the body itself: 0 of the 32 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 752, 802, 784, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/documentation.js"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9d5e275d4a3a38813bb3252078aeebbf34e16dcdb5c26ddb7baf8fba0cdf670"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectedScript.expectHitTarget (cognitive 31): InjectedScript.expectHitTarget has cognitive complexity 31 (threshold 15). Drivers by points: if/else 11 (22 pts), boolean chains 5, loops 4 (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":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1023}}}],"partialFingerprints":{"codehealthFindingId/v1":"b170a572a4072246146bfaa7ebff40f0b84946c7bc38ebf13903ad4cb060eb1f"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceModel.constructor (cognitive 31): TraceModel.constructor has cognitive complexity 31 (threshold 15). Drivers by points: boolean chains 13, loops 8 (12 pts), if/else 3 (6 pts) (nesting depth added 7). 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":"packages/isomorphic/trace/traceModel.ts"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"601afab63bbe6ca0bd20b2c278abcda4cdac1987e6401fd7c1cf94d3fb7d8f99"}},{"ruleId":"D2","level":"warning","message":{"text":"cookieStore.parseRawCookie (cognitive 31): cookieStore.parseRawCookie has cognitive complexity 31 (threshold 15). Drivers by points: if/else 10 (22 pts), match/switch 2 (5 pts), boolean chains 3, loops 1 (nesting depth added 15). Of this number, 29 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. 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":"packages/playwright-core/src/server/cookieStore.ts"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b27eaa82da37e069f6a65e7499738b02d18332f7e50a4e15a647e5d72f6d121"}},{"ruleId":"D2","level":"warning","message":{"text":"Chromium.launchWithSeleniumHub (cognitive 31): Chromium.launchWithSeleniumHub has cognitive complexity 31 (threshold 15). Drivers by points: if/else 9 (13 pts), ternaries 5 (8 pts), boolean chains 6, error handling 2 (4 pts) (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":"packages/playwright-core/src/server/chromium/chromium.ts"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f7b58b7f23283e79c9f5efc7162fb17d537134f944c921194b068fff8f8450f"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 31): (anonymous) has cognitive complexity 31 (threshold 15). Drivers by points: if/else 8 (14 pts), loops 11 (14 pts), boolean chains 2, ternaries 1 (nesting depth added 9). Of this number, 29 points are the body\u0027s own statements and 2 belong to 13 function items inside it that branch. 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":"utils/linux-browser-dependencies/inside_docker/list_dependencies.js"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dcec63e12906e54fa3087e26db1c9b6f683e4300a0c86609eae0934a2cc3ae1"}},{"ruleId":"D2","level":"warning","message":{"text":"istanbulCoverage.mergeIstanbulCoverage (cognitive 30): istanbulCoverage.mergeIstanbulCoverage has cognitive complexity 30 (threshold 15). Drivers by points: loops 7 (16 pts), boolean chains 10, if/else 2 (4 pts) (nesting depth added 11). Of this number, 29 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/istanbulCoverage.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"3994ebbed81efed36eb5151f8f2904256d2a2a8ff6068706d0adf311dc85f3df"}},{"ruleId":"D2","level":"warning","message":{"text":"traceModel.mergeActionsAndUpdateTimingSameTrace (cognitive 30): traceModel.mergeActionsAndUpdateTimingSameTrace has cognitive complexity 30 (threshold 15). Drivers by points: if/else 8 (21 pts), loops 5 (7 pts), boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceModel.ts"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"e95a64dcffbff2f82c4802b3f0caac66c77301f593cc7adeba396ca4ffa99be6"}},{"ruleId":"D2","level":"warning","message":{"text":"config.validateBrowserConfig (cognitive 30): config.validateBrowserConfig has cognitive complexity 30 (threshold 15). Drivers by points: if/else 15 (23 pts), loops 2 (4 pts), boolean chains 3 (nesting depth added 10). 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":"packages/playwright-core/src/tools/mcp/config.ts"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"b142a763e22188e4a75b19602a1f21d3ea55eb3896fdaa5f065f9b6c8a34d8ef"}},{"ruleId":"D2","level":"warning","message":{"text":"WebKit.defaultArgs (cognitive 29): WebKit.defaultArgs has cognitive complexity 29 (threshold 15). Drivers by points: if/else 15 (22 pts), boolean chains 4, ternaries 2 (3 pts) (nesting depth added 8). 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":"packages/playwright-core/src/server/webkit/webkit.ts"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a0e35883266842090e69663faf177cbdd57e5c69d043e6ae59a5e640330a72b"}},{"ruleId":"D2","level":"warning","message":{"text":"program.killAllDaemons (cognitive 29): program.killAllDaemons has cognitive complexity 29 (threshold 15). Drivers by points: if/else 6 (16 pts), error handling 2 (6 pts), loops 2 (4 pts), boolean chains 2, ternaries 1 (nesting depth added 16). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/program.ts"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5057c2d716caf2c969fa7a7cc68935cc1266ed0cf9bff508442e51ee91e6262"}},{"ruleId":"D2","level":"warning","message":{"text":"stackTrace.parseStackFrame (cognitive 29): stackTrace.parseStackFrame has cognitive complexity 29 (threshold 15). Drivers by points: if/else 14 (21 pts), boolean chains 6, loops 1 (2 pts) (nesting depth added 8). 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":"packages/utils/stackTrace.ts"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"a637a52b8b5dbbb5167d9f0707ffc56b666167a8acd4ebaf4a5c32d115d1d5fa"}},{"ruleId":"D2","level":"warning","message":{"text":"listView.ListView (cognitive 29): listView.ListView has cognitive complexity 29 (threshold 15). Drivers by points: boolean chains 14, if/else 10 (12 pts), ternaries 3 (nesting depth added 2). Most of this is not in the body itself: 3 of the 29 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 89, 124, 80, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/listView.tsx"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"0504d19f041ecc9f3c1c66dc3d61308165de6643e29861f88b74a6338e12b6d5"}},{"ruleId":"D2","level":"warning","message":{"text":"parseOverrides.parseOverrides (cognitive 29): parseOverrides.parseOverrides has cognitive complexity 29 (threshold 15). Drivers by points: if/else 9 (15 pts), loops 4 (7 pts), boolean chains 4, ternaries 2 (3 pts) (nesting depth added 10). 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":"utils/generate_types/parseOverrides.js"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"56367f58c83ae08660304509b87c811f39561c1b6315b0dd8f872a352c443df0"}},{"ruleId":"D2","level":"warning","message":{"text":"processLauncher.launchProcess (cognitive 28): processLauncher.launchProcess has cognitive complexity 28 (threshold 15). Drivers by points: if/else 10 (12 pts), boolean chains 8, error handling 2 (4 pts), loops 2, ternaries 2 (nesting depth added 4). Of this number, 22 points are the body\u0027s own statements and 6 belong to one function literal inside it that branches. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/processLauncher.ts"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"1035a04ebfdf5f451eaeb6c1cf427b5473988ce87f36585f8852d6bee93d8b1c"}},{"ruleId":"D2","level":"warning","message":{"text":"index.jsonToTS (cognitive 28): index.jsonToTS has cognitive complexity 28 (threshold 15). Drivers by points: ternaries 14 (18 pts), boolean chains 10 (nesting depth added 4). Most of this is not in the body itself: 0 of the 28 points are its own statements and the rest belongs to 12 function literals inside it that branch (lines 43, 47, 69, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/protocol-types-generator/index.js"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6d7b6d3f52ed4fd5a32a462e2e4634434c8e961bb78c914d5979b5a0fec1bb5"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectedScript.selectOptions (cognitive 27): InjectedScript.selectOptions has cognitive complexity 27 (threshold 15). Drivers by points: if/else 12 (20 pts), boolean chains 6, loops 1 (nesting depth added 8). Most of this is not in the body itself: 11 of the 27 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 856, 859). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":843}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8aa1c6be03990ec11ef8bd21083829f40dab7232e6e1f26a766ed636928179a"}},{"ruleId":"D2","level":"warning","message":{"text":"PythonLocatorFactory.generateLocator (cognitive 27): PythonLocatorFactory.generateLocator has cognitive complexity 27 (threshold 15). Drivers by points: if/else 8 (15 pts), ternaries 3 (7 pts), boolean chains 2, loops 1 (2 pts), match/switch 1 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"36c782c7c6fb3cf4f836c290ac23abd840f9af79fb701dfc8015b5c251d988f0"}},{"ruleId":"D2","level":"warning","message":{"text":"EventEmitter.removeListener (cognitive 27): EventEmitter.removeListener has cognitive complexity 27 (threshold 15). Drivers by points: if/else 13 (22 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 10). 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":"packages/playwright-core/src/client/eventEmitter.ts"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"749b65e14755657306f70ae72c777a3878232d512348bd7e62097e00daa47213"}},{"ruleId":"D2","level":"warning","message":{"text":"TypesGenerator.classBody (cognitive 27): TypesGenerator.classBody has cognitive complexity 27 (threshold 15). Drivers by points: if/else 10 (14 pts), ternaries 4 (6 pts), loops 3 (5 pts), boolean chains 2 (nesting depth added 8). Most of this is not in the body itself: 10 of the 27 points are its own statements and the rest belongs to one function literal inside it that branches (line 281). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_types/index.js"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1b8e7ad60d756886d71120559ac2dc6c8b27c4e06c59ceb87c9175a1580b540"}},{"ruleId":"D2","level":"warning","message":{"text":"validate_deps.isEntryUsed (cognitive 27): validate_deps.isEntryUsed has cognitive complexity 27 (threshold 15). Drivers by points: if/else 9 (21 pts), boolean chains 3, ternaries 1 (2 pts), loops 1 (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":"utils/validate_deps.js"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d0ce14d0166ffa17933d76b4417277d5b8aaf6c90057c96682a19a5312bde4e"}},{"ruleId":"D2","level":"warning","message":{"text":"TargetRegistry.constructor (cognitive 26): TargetRegistry.constructor has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15 (16 pts), boolean chains 6, loops 4 (nesting depth added 1). Most of this is not in the body itself: 5 of the 26 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 185, 152, 220, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/TargetRegistry.js"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"477f1c276cca004c9c60659da24b39a65a78c69a0f9a1a7b93973c0e00f713d7"}},{"ruleId":"D2","level":"warning","message":{"text":"reportView.ReportView (cognitive 26): reportView.ReportView has cognitive complexity 26 (threshold 15). Drivers by points: boolean chains 9, if/else 7 (9 pts), ternaries 4, loops 2 (3 pts), match/switch 1 (nesting depth added 3). Most of this is not in the body itself: 7 of the 26 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 89, 62, 72, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/reportView.tsx"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"64fd8f293a8e92197893d7781938465dfe01bd348181804df9428884bfb9e1e4"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorParser.parseSelectorString (cognitive 26): selectorParser.parseSelectorString has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14 (16 pts), boolean chains 9, loops 1 (nesting depth added 2). Most of this is not in the body itself: 12 of the 26 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 189, 232). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/selectorParser.ts"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"f88df91e3a54687d940b6e5c25f53cb1728057735185ee5c82bf6acf87af1f4d"}},{"ruleId":"D2","level":"warning","message":{"text":"Frame.waitForSelector (cognitive 26): Frame.waitForSelector has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15 (16 pts), ternaries 4 (5 pts), boolean chains 4, error handling 1 (nesting depth added 2). Most of this is not in the body itself: 8 of the 26 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 846, 853). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"c07ab01824815d499acd1ae50922f90196fe6eb7013655d1763996692c50a4f0"}},{"ruleId":"D2","level":"warning","message":{"text":"bisect-chromium.findExecutable (cognitive 26): bisect-chromium.findExecutable has cognitive complexity 26 (threshold 15). Drivers by points: if/else 6 (19 pts), boolean chains 3, loops 2 (3 pts), ternaries 1 (nesting depth added 14). 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":"utils/bisect-chromium.mjs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3510128952285d2f246c72ae83ee04cc4b0fe6be1da6e4ccc141e329557a418"}},{"ruleId":"D2","level":"warning","message":{"text":"ApiParser.parseArgument (cognitive 26): ApiParser.parseArgument has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13 (19 pts), boolean chains 4, loops 1 (3 pts) (nesting depth added 8). Of this number, 25 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"utils/doclint/api_parser.js"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"193569046f4748cd6f98fb34655a8693055c6817aa8e6366695a36cc73a477d0"}},{"ruleId":"D2","level":"warning","message":{"text":"api_parser.applyTemplates (cognitive 26): api_parser.applyTemplates has cognitive complexity 26 (threshold 15). Drivers by points: if/else 9 (15 pts), boolean chains 6, loops 4 (5 pts) (nesting depth added 7). Most of this is not in the body itself: 2 of the 26 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 298, 332). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/api_parser.js"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"f09ad5318916c7325223009796f172ec0f84f5f16702d0425015e16c65370ce0"}},{"ruleId":"D2","level":"warning","message":{"text":"(anonymous) (cognitive 26): (anonymous) has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13 (16 pts), boolean chains 5, loops 2 (4 pts), other 1 (nesting depth added 5). Of this number, 25 points are the body\u0027s own statements and 1 belongs to 2 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/roll_browser.js"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ed4d5b1475cbdaf003eef6555641c0c0035c7ce0d3ffe5027f183a2f7cac527"}},{"ruleId":"D2","level":"warning","message":{"text":"parseMember (cognitive 26): parseMember has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13 (16 pts), boolean chains 6, loops 2 (3 pts), other 1 (nesting depth added 4). Of this number, 25 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/api_parser.js"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ef7cd65137662cba9e3955b9af2e78096f847b60bb20a02e32f8adb0fa15df4"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectedScript.dispatchEvent (cognitive 25): InjectedScript.dispatchEvent has cognitive complexity 25 (threshold 15). Drivers by points: if/else 6 (15 pts), boolean chains 5, error handling 2 (4 pts), match/switch 1 (nesting depth added 11). Most of this is not in the body itself: 8 of the 25 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 1214, 1226, 1238, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1205}}}],"partialFingerprints":{"codehealthFindingId/v1":"12b924ac9f0637280dfc5af28fb354b4ccf3265c38f8bd8677e38c279d71f1c9"}},{"ruleId":"D2","level":"warning","message":{"text":"webAuthn.inject (cognitive 25): webAuthn.inject has cognitive complexity 25 (threshold 15). Drivers by points: boolean chains 14, if/else 6, loops 4, ternaries 1. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/webAuthn.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"0538994fc116c86e2e02c2e8dedaa1af793cfba04fd6b8a5b31b484e792e33ee"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorParser.splitSelectorByFrame (cognitive 25): selectorParser.splitSelectorByFrame has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (17 pts), boolean chains 7, loops 1 (nesting depth added 8). 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":"packages/isomorphic/selectorParser.ts"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"417ece8b64e5cf9f2d6e74339d81564b82f77be4005389d1a346c127ac68f99f"}},{"ruleId":"D2","level":"warning","message":{"text":"JavaLocatorFactory.generateLocator (cognitive 25): JavaLocatorFactory.generateLocator has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (12 pts), ternaries 3 (7 pts), boolean chains 2, loops 1 (2 pts), match/switch 2 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"c63b1d0c41422d3049f3f886b3966997a5e1a3ccfd8ba28ae31eeddf8a2be7bc"}},{"ruleId":"D2","level":"warning","message":{"text":"protocolFormatter._formatProtocolParam (cognitive 25): protocolFormatter._formatProtocolParam has cognitive complexity 25 (threshold 15). Drivers by points: if/else 8 (19 pts), error handling 1 (3 pts), boolean chains 2, loops 1 (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":"packages/isomorphic/protocolFormatter.ts"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ac2b0619952c04610dca085bc70fc3e3cabf1a95c14c4bada9a63c0994ec387"}},{"ruleId":"D2","level":"warning","message":{"text":"urlMatch.resolveGlobBase (cognitive 25): urlMatch.resolveGlobBase has cognitive complexity 25 (threshold 15). Drivers by points: if/else 8 (16 pts), boolean chains 4, ternaries 1 (3 pts), loops 1 (2 pts) (nesting depth added 11). Most of this is not in the body itself: 11 of the 25 points are its own statements and the rest belongs to one function literal inside it that branches (line 232). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/urlMatch.ts"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"39e5333ba84a1b730c5f11d9cc51c66c3cc47998531fbf01f42f4c66ca19f702"}},{"ruleId":"D2","level":"warning","message":{"text":"HarTracer._onRequestFinished (cognitive 25): HarTracer._onRequestFinished has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12 (16 pts), boolean chains 8, ternaries 1 (nesting depth added 4). Of this number, 13 points are the body\u0027s own statements and 12 belong to 5 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/har/harTracer.ts"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"f209d4f6b6534cec385d2c48e67350e60cabf787c4e52144cbdf17424b349b8c"}},{"ruleId":"D2","level":"warning","message":{"text":"HarTracer._onWebSocket (cognitive 25): HarTracer._onWebSocket has cognitive complexity 25 (threshold 15). Drivers by points: if/else 18 (20 pts), ternaries 2 (3 pts), boolean chains 2 (nesting depth added 3). Most of this is not in the body itself: 5 of the 25 points are its own statements and the rest belongs to 6 function literals inside it that branch (lines 459, 511, 475, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/har/harTracer.ts"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"1391270e6f053affbea3e13814f83cbebe343d8615a5a58ba8a0cbb3d588929b"}},{"ruleId":"D2","level":"warning","message":{"text":"Connection.dispatch (cognitive 25): Connection.dispatch has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14 (22 pts), boolean chains 3 (nesting depth added 8). 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":"packages/playwright-core/src/client/connection.ts"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"09c5fdce75a0dfcd432a288be37bd35989878da3e6ac49b0ad65866038f58389"}},{"ruleId":"D2","level":"warning","message":{"text":"callTab.parseSerializedValue (cognitive 25): callTab.parseSerializedValue has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16 (23 pts), loops 1 (2 pts) (nesting depth added 8). 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":"packages/trace-viewer/src/ui/callTab.tsx"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4528951dfbd58343963fa4256921fc86abe9f7078c4f13d323f992068440640"}},{"ruleId":"D2","level":"warning","message":{"text":"snapshotTab.collectSnapshots (cognitive 25): snapshotTab.collectSnapshots has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9 (16 pts), boolean chains 5, loops 2 (4 pts) (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":"packages/trace-viewer/src/ui/snapshotTab.tsx"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"b34c75d21d10551e79e1fdef9f889934d490391d6ef8b6dc3fab51f6fd3bc4bb"}},{"ruleId":"D2","level":"warning","message":{"text":"compare.compare (cognitive 25): compare.compare has cognitive complexity 25 (threshold 15). Drivers by points: if/else 6 (16 pts), boolean chains 3, loops 2 (3 pts), ternaries 3 (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":"packages/utils/image_tools/compare.ts"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"f47ac5eea9f20d9bcb2ce82bdb15b7459587ac5edd0a7480c4317856642fabea"}},{"ruleId":"D2","level":"warning","message":{"text":"roleSelectorEngine.validateAttributes (cognitive 24): roleSelectorEngine.validateAttributes has cognitive complexity 24 (threshold 15). Drivers by points: if/else 6 (18 pts), boolean chains 3, match/switch 1 (2 pts), loops 1 (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":"packages/injected/src/roleSelectorEngine.ts"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aacfe79b7a272dd581f516f8f966c430eb519fe104fe0ac47ca74ec0204e7f1"}},{"ruleId":"D2","level":"warning","message":{"text":"JavaScriptLocatorFactory.generateLocator (cognitive 24): JavaScriptLocatorFactory.generateLocator has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (12 pts), ternaries 3 (7 pts), boolean chains 2, loops 1 (2 pts), match/switch 1 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident. This shape REPEATS in the file: one other method here (CSharpLocatorFactory.generateLocator) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"32d5ba4bcaa205ef332715474f18306a339fe2825c83914059a45750428adeff"}},{"ruleId":"D2","level":"warning","message":{"text":"CSharpLocatorFactory.generateLocator (cognitive 24): CSharpLocatorFactory.generateLocator has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (12 pts), ternaries 3 (7 pts), boolean chains 2, loops 1 (2 pts), match/switch 1 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident. This shape REPEATS in the file: one other method here (JavaScriptLocatorFactory.generateLocator) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":638}}}],"partialFingerprints":{"codehealthFindingId/v1":"3859dc49703b08933a76322cede8eeed7284dbc1f6d080a4e0e3693949cf8406"}},{"ruleId":"D2","level":"warning","message":{"text":"Frame.gotoImpl (cognitive 24): Frame.gotoImpl has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (16 pts), boolean chains 4, ternaries 4 (nesting depth added 5). Of this number, 22 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. 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":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc2331faf06bb293da39a88a746458c718ab0edb3d15fe855f6a24bf5e71f5cd"}},{"ruleId":"D2","level":"warning","message":{"text":"Frame.expect (cognitive 24): Frame.expect has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (15 pts), error handling 3 (4 pts), boolean chains 3, ternaries 1 (2 pts) (nesting depth added 6). Of this number, 23 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":1468}}}],"partialFingerprints":{"codehealthFindingId/v1":"95ea34032b791add0a9ed4d9b894bb3796943ab79ede3f545828a481bdadb686"}},{"ruleId":"D2","level":"warning","message":{"text":"input.buildLayoutClosure (cognitive 24): input.buildLayoutClosure has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (15 pts), boolean chains 5, loops 2 (4 pts) (nesting depth added 10). 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":"packages/playwright-core/src/server/input.ts"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f749a32839b77e4c400c3eef59fe8eaf7adadeac4324735c6ae406d49780162"}},{"ruleId":"D2","level":"warning","message":{"text":"APIRequestContext.fetch (cognitive 24): APIRequestContext.fetch has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (13 pts), loops 3 (6 pts), boolean chains 4, ternaries 1 (nesting depth added 6). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/fetch.ts"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"03e4419ed7974a450aaf378cc2975d67424b92c29ba1b1fdcae2fffe514901ed"}},{"ruleId":"D2","level":"warning","message":{"text":"consoleTab.format (cognitive 24): consoleTab.format has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (13 pts), ternaries 3 (5 pts), boolean chains 4, loops 2 (nesting depth added 7). 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":"packages/trace-viewer/src/ui/consoleTab.tsx"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"bede533977b0922d7748df0a3573f8f6d467988239dad8efa462a4eb42d861bc"}},{"ruleId":"D2","level":"warning","message":{"text":"ariaModeView.collectAriaModeTargets (cognitive 24): ariaModeView.collectAriaModeTargets has cognitive complexity 24 (threshold 15). Drivers by points: if/else 6 (12 pts), boolean chains 5, loops 2 (4 pts), ternaries 3 (nesting depth added 8). Of this number, 23 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"packages/trace-viewer/src/ui/ariaModeView.tsx"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"85eacdc4a109f70b6d17b3f46b173f77006138049a4d086fb919e007fbec2c15"}},{"ruleId":"D2","level":"warning","message":{"text":"snapshotTab.InspectModeController (cognitive 24): snapshotTab.InspectModeController has cognitive complexity 24 (threshold 15). Drivers by points: ternaries 7 (10 pts), if/else 3 (6 pts), error handling 2 (3 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 8). Most of this is not in the body itself: 0 of the 24 points are its own statements and the rest belongs to one function literal inside it that branches (line 292). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/snapshotTab.tsx"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d99ab4eb40453d25e2f35e000aa31423f41cb9ddc4c463d8207ec19ba44d81f"}},{"ruleId":"D2","level":"warning","message":{"text":"documentation.patchCSharpOptionOverloads (cognitive 24): documentation.patchCSharpOptionOverloads has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (18 pts), loops 3 (4 pts), boolean chains 2 (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":"utils/doclint/documentation.js"},"region":{"startLine":830}}}],"partialFingerprints":{"codehealthFindingId/v1":"8143f72c60109201184cec2a06f90a15a09709266d72ef1aaf70a29ea1d33473"}},{"ruleId":"D2","level":"warning","message":{"text":"generate_channels.inlineType (cognitive 24): generate_channels.inlineType has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12 (20 pts), boolean chains 2, ternaries 1 (2 pts) (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":"utils/generate_channels.js"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"50cb9c03095feee892a2d5d495f0e5a51ab45cc7a42e7a9c886aa058dbdc2fb2"}},{"ruleId":"D2","level":"warning","message":{"text":"debuggerPanel.DebuggerPanel (cognitive 23): debuggerPanel.DebuggerPanel has cognitive complexity 23 (threshold 15). Drivers by points: boolean chains 14, if/else 6 (7 pts), ternaries 2 (nesting depth added 1). Most of this is not in the body itself: 6 of the 23 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 89, 50, 44, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/debuggerPanel.tsx"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f99409a925f0958b582753670859e728e3864daa50792882664e224493d7ec2"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectedScript.querySelectorAll (cognitive 23): InjectedScript.querySelectorAll has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11 (14 pts), loops 3 (8 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f68398f190a212833cf190ee74f528b9f662a7061fde0da308dbbcf882eddaa"}},{"ruleId":"D2","level":"warning","message":{"text":"JavaScriptLanguageGenerator._generateActionCall (cognitive 23): JavaScriptLanguageGenerator._generateActionCall has cognitive complexity 23 (threshold 15). Drivers by points: ternaries 10 (20 pts), if/else 1 (2 pts), match/switch 1 (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/codegen/javascript.ts"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"96065b7a11aaf487cbcfda33b6fd7c4fc9b04ce9c5de854b2b680f9c74be29ef"}},{"ruleId":"D2","level":"warning","message":{"text":"PythonLanguageGenerator.generateHeader (cognitive 23): PythonLanguageGenerator.generateHeader has cognitive complexity 23 (threshold 15). Drivers by points: ternaries 5 (13 pts), if/else 6 (9 pts), boolean chains 1 (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":"packages/isomorphic/codegen/python.ts"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f157f990c1e2fa1d2e731faf52108a52c45e66bb7e7122d0fa6113ac09280d3"}},{"ruleId":"D2","level":"warning","message":{"text":"SnapshotRenderer.resourceByUrl (cognitive 23): SnapshotRenderer.resourceByUrl has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (18 pts), boolean chains 4, 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":"packages/isomorphic/trace/snapshotRenderer.ts"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"48ba71c17410e783fc780825d70303d1f77f0c492f4ecdad0e32eb623ecddabe"}},{"ruleId":"D2","level":"warning","message":{"text":"HarTracer._onResponse (cognitive 23): HarTracer._onResponse has cognitive complexity 23 (threshold 15). Drivers by points: ternaries 5 (10 pts), if/else 5 (9 pts), boolean chains 4 (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":"packages/playwright-core/src/server/har/harTracer.ts"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"d581eb12ec6cff491f22e558d43ba60f8888970d1c3c83ebfa773520da3adf4a"}},{"ruleId":"D2","level":"warning","message":{"text":"browserContext.verifyClientCertificates (cognitive 23): browserContext.verifyClientCertificates has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (16 pts), boolean chains 6, loops 1 (nesting depth added 8). 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":"packages/playwright-core/src/server/browserContext.ts"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e2835e493d40c1e811df6136c2219fe5e8746af7f2b08df7fee46eef8232541"}},{"ruleId":"D2","level":"warning","message":{"text":"installActions.installBrowsers (cognitive 23): installActions.installBrowsers has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (11 pts), loops 2 (6 pts), boolean chains 3, ternaries 2 (3 pts) (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/cli/installActions.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"80b78a9c62d77139bbad2988eda8ced16d79f2915f3e4dcafdac2f6519005a0c"}},{"ruleId":"D2","level":"warning","message":{"text":"sourceTab.useSources (cognitive 23): sourceTab.useSources has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (11 pts), boolean chains 6, ternaries 3 (4 pts), error handling 1 (2 pts) (nesting depth added 5). Most of this is not in the body itself: 0 of the 23 points are its own statements and the rest belongs to one function literal inside it that branches (line 39). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/sourceTab.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f37646deca1dda2fd618f0e8ac93cb09a3d063dde3911127eaf0f86f2f8a5e8"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordActionTool._shouldGenerateKeyPressFor (cognitive 22): RecordActionTool._shouldGenerateKeyPressFor has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 8 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level. This shape REPEATS in the file: one other method here (JsonRecordActionTool._shouldGenerateKeyPressFor) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/recorder/recorder.ts"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb921c9e1e1e1b5e1d78982871b356d786904337e8817c8c698eb80b59854982"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonRecordActionTool._shouldGenerateKeyPressFor (cognitive 22): JsonRecordActionTool._shouldGenerateKeyPressFor has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 8 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level. This shape REPEATS in the file: one other method here (RecordActionTool._shouldGenerateKeyPressFor) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/recorder/recorder.ts"},"region":{"startLine":810}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c47bb40d8ba696a1e7bb3d108ca432631bfeedce35556242e7ba1b7f28f5de3"}},{"ruleId":"D2","level":"warning","message":{"text":"locatorParser.tokenize (cognitive 22): locatorParser.tokenize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14 (17 pts), boolean chains 3, loops 2 (nesting depth added 3). Of this number, 12 points are the body\u0027s own statements and 10 belong to 2 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorParser.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"c67ff7a7e4b5b2f9abe9d99fc0033ef0c16b16ad1d65af216a220db0b3dd1801"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceModernizer._innerAppendEvent (cognitive 22): TraceModernizer._innerAppendEvent has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (15 pts), boolean chains 6, match/switch 1 (nesting depth added 5). 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":"packages/isomorphic/trace/traceModernizer.ts"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"e81ab4e80f27fa19b9c33bc5bd116ae80f0ec7a234ea60a8cf47820932cc478e"}},{"ruleId":"D2","level":"warning","message":{"text":"elementHandle.convertInputFiles (cognitive 22): elementHandle.convertInputFiles has cognitive complexity 22 (threshold 15). Drivers by points: ternaries 5 (13 pts), if/else 4 (6 pts), loops 1 (3 pts) (nesting depth added 12). Of this number, 16 points are the body\u0027s own statements and 6 belong to 2 function literals inside it that branch. 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":"packages/playwright-core/src/client/elementHandle.ts"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"54bdcb3212ced1f24509ed5103806cdc3baa223ad12dbe314e25b58aa301af7c"}},{"ruleId":"D2","level":"warning","message":{"text":"Registry.constructor (cognitive 22): Registry.constructor has cognitive complexity 22 (threshold 15). Drivers by points: ternaries 10 (11 pts), if/else 8 (9 pts), boolean chains 2 (nesting depth added 2). Most of this is not in the body itself: 8 of the 22 points are its own statements and the rest belongs to 4 function literals inside it that branch (lines 516, 747, 512, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/registry/index.ts"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a9014f91b8b883a74dafbceaac70ae39e5fbe68e3e81d17780ea26577ee119e"}},{"ruleId":"D2","level":"warning","message":{"text":"WKPage._onConsoleMessage (cognitive 22): WKPage._onConsoleMessage has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (11 pts), boolean chains 10, loops 1 (nesting depth added 3). 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":"packages/playwright-core/src/server/webkit/wkPage.ts"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c6405bf36265dcca2d402bc485afbdc09e3f2a89ee7cfa83042b6682dbf9ab7"}},{"ruleId":"D2","level":"warning","message":{"text":"localUtils.zip (cognitive 22): localUtils.zip has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (11 pts), loops 4 (8 pts), boolean chains 1, error handling 1, ternaries 1 (nesting depth added 6). Of this number, 16 points are the body\u0027s own statements and 6 belong to 3 function literals inside it that branch. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/localUtils.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cbea10ad34e5e689fb6c506c5f8f5ebdcc96cd607e73af98a27db54c533d20e"}},{"ruleId":"D2","level":"warning","message":{"text":"config.configFromCLIOptions (cognitive 22): config.configFromCLIOptions has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15 (18 pts), boolean chains 2, ternaries 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/mcp/config.ts"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"a01bee691d1c8dd7cc0bfaa6dfbb30280c0b8b87ef389f3f5e0039e07dc5e9a4"}},{"ruleId":"D2","level":"warning","message":{"text":"program.decorateMCPCommand (cognitive 22): program.decorateMCPCommand has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 4, error handling 2, ternaries 1 (2 pts) (nesting depth added 4). Most of this is not in the body itself: 0 of the 22 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 113, 164, 88, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/mcp/program.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d54c0e899cfc139199a0058cb3535cfc5350c3e5050fe9efb0333da88034aa"}},{"ruleId":"D2","level":"warning","message":{"text":"generate_dotnet_channels.inlineType (cognitive 22): generate_dotnet_channels.inlineType has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13 (22 pts) (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":"utils/generate_dotnet_channels.js"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"48c6e8c677deb6c1e85ae9655f6203009a84c371c9179f38a43de9c9e8607f17"}},{"ruleId":"D2","level":"warning","message":{"text":"TypesGenerator.stringifySimpleType (cognitive 22): TypesGenerator.stringifySimpleType has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15 (18 pts), boolean chains 4 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_types/index.js"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c838f311a9c0347c01beb779522aff41912060e2944005eec6c8d8419dda473"}},{"ruleId":"D2","level":"warning","message":{"text":"setCookies (cognitive 22): setCookies has cognitive complexity 22 (threshold 15). Drivers by points: if/else 5 (10 pts), ternaries 3 (7 pts), boolean chains 4, 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":"browser_patches/firefox/juggler/TargetRegistry.js"},"region":{"startLine":1172}}}],"partialFingerprints":{"codehealthFindingId/v1":"60c57f4c5de71aa963f907bfb968787d2a46dc856e4be413d7afcef882546d21"}},{"ruleId":"D2","level":"warning","message":{"text":"sessionSidebar.SessionSidebar (cognitive 21): sessionSidebar.SessionSidebar has cognitive complexity 21 (threshold 15). Drivers by points: boolean chains 7, if/else 3 (6 pts), ternaries 4 (5 pts), loops 3 (nesting depth added 4). Most of this is not in the body itself: 2 of the 21 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 103, 83, 138, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/sessionSidebar.tsx"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"958f576270ec723c63146f9bae2f9d334888deefa8f3502965b8057214899c66"}},{"ruleId":"D2","level":"warning","message":{"text":"connect.ConnectApp (cognitive 21): connect.ConnectApp has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, boolean chains 6, error handling 2, ternaries 1. Most of this is not in the body itself: 4 of the 21 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 50, 131, 123). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/extension/src/ui/connect.tsx"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cd921eee11ec9e513ed1381d576621411ba66d7ad5c6f6aea2350eae86bcc93"}},{"ruleId":"D2","level":"warning","message":{"text":"bidiInsertText.bidiInsertText (cognitive 21): bidiInsertText.bidiInsertText has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (14 pts), boolean chains 4, loops 2 (3 pts) (nesting depth added 6). 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":"packages/injected/src/bidiInsertText.ts"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"df79155dfd42ce86df8fcee4b15434571362d44d2aa0362ce78315fb62c04eb7"}},{"ruleId":"D2","level":"warning","message":{"text":"Route._innerFulfill (cognitive 21): Route._innerFulfill has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12 (15 pts), boolean chains 5, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/network.ts"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc2c991697b08310dacda8e69a8aa3f502a57f876dd42a8df9d8a0f0961801f7"}},{"ruleId":"D2","level":"warning","message":{"text":"BidiChromium._innerDefaultArgs (cognitive 21): BidiChromium._innerDefaultArgs has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11 (15 pts), boolean chains 3, ternaries 1 (3 pts) (nesting depth added 6). Of this number, 18 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. 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":"packages/playwright-core/src/server/bidi/bidiChromium.ts"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"e887f194d2b74705f829f268d0bda96bdff12815ac6f5d438e6e40a055588c9b"}},{"ruleId":"D2","level":"warning","message":{"text":"traceActions.traceAction (cognitive 21): traceActions.traceAction has cognitive complexity 21 (threshold 15). Drivers by points: loops 4 (8 pts), if/else 7, ternaries 3 (6 pts) (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/trace/traceActions.ts"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"af1a90edb47537ae3adeae5aecb1fafbf6ee795c4cc33cc05897aa744306f9c9"}},{"ruleId":"D2","level":"warning","message":{"text":"traceRequests.traceRequests (cognitive 21): traceRequests.traceRequests has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (11 pts), ternaries 3 (6 pts), error handling 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 7). 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":"packages/playwright-core/src/tools/trace/traceRequests.ts"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"80cf08a1b1da1025114b5d1d426dff8af2403195c8808fe81e03048ad4d2bf03"}},{"ruleId":"D2","level":"warning","message":{"text":"consoleTab.ConsoleTab (cognitive 21): consoleTab.ConsoleTab has cognitive complexity 21 (threshold 15). Drivers by points: boolean chains 7, if/else 6 (7 pts), ternaries 5 (7 pts) (nesting depth added 3). Most of this is not in the body itself: 1 of the 21 points is its own statement and the rest belongs to 2 function literals inside it that branch (lines 177, 173). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/consoleTab.tsx"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8a8dc04a1a3aa93d7be71f32ab05c0a1089b1977cc0e018534b9eaea3824bed"}},{"ruleId":"D2","level":"warning","message":{"text":"ansi2html.ansi2html (cognitive 21): ansi2html.ansi2html has cognitive complexity 21 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 2 (4 pts), match/switch 1 (4 pts), ternaries 1 (3 pts), boolean chains 1 (nesting depth added 12). 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":"packages/web/src/ansi2html.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"431c0100ab2c546297aaa25c465ca2e4d3c5712239ed3fdff7d91d2ebbfa18ff"}},{"ruleId":"D2","level":"warning","message":{"text":"splitView.SplitView (cognitive 21): splitView.SplitView has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10 (14 pts), boolean chains 5, ternaries 2 (nesting depth added 4). 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":"packages/web/src/components/splitView.tsx"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a55e47666a6decb237f302a34d3ceb86263a5d2f916a07e2b07a5e03be82871"}},{"ruleId":"D2","level":"warning","message":{"text":"renderMethod::processArg (cognitive 21): renderMethod::processArg has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (12 pts), boolean chains 5, loops 1 (2 pts), ternaries 1 (2 pts) (nesting depth added 5). 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":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"daeb86bcbdb75e0af9d249bcff21b225f1ec20a89537f6026f1b1b05dbf5d970"}},{"ruleId":"D2","level":"warning","message":{"text":"fromParsedType (cognitive 21): fromParsedType has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (7 pts), boolean chains 6, loops 3 (6 pts), ternaries 1 (2 pts) (nesting depth added 6). 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":"utils/doclint/documentation.js"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed57fbac7dc7d49fe6a25e39f491b4e7b366462496693c196efdf3a53abe1d79"}},{"ruleId":"D2","level":"warning","message":{"text":"applyTemplates::visit (cognitive 21): applyTemplates::visit has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (13 pts), boolean chains 5, loops 2 (3 pts) (nesting depth added 6). 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":"utils/doclint/api_parser.js"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"417e2b6878f17aa12d47970c4c922ec5281ced268d11a5da5259907f678a541d"}},{"ruleId":"D2","level":"warning","message":{"text":"PageHandler.[\u0027Page.dispatchMouseEvent\u0027] (cognitive 20): PageHandler.[\u0027Page.dispatchMouseEvent\u0027] has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (16 pts), ternaries 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 6). Most of this is not in the body itself: 0 of the 20 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 524, 486). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/PageHandler.js"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"e27dc5d64b72359f6ade332d71581e5ddd4510239523440b1fd62082318d9860"}},{"ruleId":"D2","level":"warning","message":{"text":"Filter.tokenize (cognitive 20): Filter.tokenize has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (17 pts), boolean chains 2, loops 1 (nesting depth added 8). 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":"packages/html-reporter/src/filter.ts"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0d0dec1bb2707c003bccda2f7de924f5e06f22a527e082d2031f2d97c711a5f"}},{"ruleId":"D2","level":"warning","message":{"text":"ariaSnapshot.toAriaNode (cognitive 20): ariaSnapshot.toAriaNode has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (13 pts), boolean chains 6, ternaries 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/ariaSnapshot.ts"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6f75f37229b80c8552b12e801ca674862b17bedad4b117326d8cd05a847bbcd"}},{"ruleId":"D2","level":"warning","message":{"text":"traceModel.adjustMonotonicTime (cognitive 20): traceModel.adjustMonotonicTime has cognitive complexity 20 (threshold 15). Drivers by points: loops 9 (10 pts), if/else 4 (7 pts), boolean chains 3 (nesting depth added 4). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceModel.ts"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f3e533454d90d2febf58ec0ba6a38d1160c1895a839936ee9d8a21489729fe3"}},{"ruleId":"D2","level":"warning","message":{"text":"bidiExecutionContext.renderPreview (cognitive 20): bidiExecutionContext.renderPreview has cognitive complexity 20 (threshold 15). Drivers by points: if/else 3 (7 pts), ternaries 3 (7 pts), boolean chains 3, loops 1 (2 pts), match/switch 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiExecutionContext.ts"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d4706f1c9508f7e31e7abcdb78541ac39b318e58856a53e83d084454e180f2e"}},{"ruleId":"D2","level":"warning","message":{"text":"Chromium._innerDefaultArgs (cognitive 20): Chromium._innerDefaultArgs has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (14 pts), boolean chains 3, ternaries 1 (3 pts) (nesting depth added 6). Of this number, 17 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. 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":"packages/playwright-core/src/server/chromium/chromium.ts"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d4c5b0fd4183c5956f708fe1746e5cf0d754e271df1fd717b76da4ebba6df3b"}},{"ruleId":"D2","level":"warning","message":{"text":"BrowserContextDispatcher.constructor (cognitive 20): BrowserContextDispatcher.constructor has cognitive complexity 20 (threshold 15). Drivers by points: boolean chains 11, if/else 6, loops 2 (3 pts) (nesting depth added 1). Most of this is not in the body itself: 7 of the 20 points are its own statements and the rest belongs to 8 function literals inside it that branch (lines 124, 155, 179, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"b41bc9d1fc4fd7235e35c813b35204045d285df7610ec52b09069e2077fe5525"}},{"ruleId":"D2","level":"warning","message":{"text":"ElementHandle._setInputFiles (cognitive 20): ElementHandle._setInputFiles has cognitive complexity 20 (threshold 15). Drivers by points: boolean chains 8, if/else 8, ternaries 2 (4 pts) (nesting depth added 2). Of this number, 12 points are the body\u0027s own statements and 8 belong to one function literal inside it that branches. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dom.ts"},"region":{"startLine":718}}}],"partialFingerprints":{"codehealthFindingId/v1":"f26228604bbe83a59ea58961c42563f694df09c83a679b261282c941f1bdd70d"}},{"ruleId":"D2","level":"warning","message":{"text":"(computed) (cognitive 20): (computed) has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (16 pts), ternaries 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 6). Most of this is not in the body itself: 0 of the 20 points are its own statements and the rest belongs to 3 function items inside it that branch ((anonymous), sendEvents, sendEvents::(anonymous)). Those helpers are already separate functions, so extracting the branching again is not available. To reduce it, move them out of the body to the enclosing scope, where each is measured, reviewed and tested on its own, and reduce whichever one then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/PageHandler.js"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae8c5971fff3386b8d4c7e66bbf5bc0e3ad9d8351cee692ed9e9e72e25ec744b"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectedScript.fill (cognitive 19): InjectedScript.fill has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (18 pts), boolean chains 1 (nesting depth added 8). 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":"packages/injected/src/injectedScript.ts"},"region":{"startLine":892}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5e451254ae99eef286dcfbf9e692d266931a38d8c05c433fd65bfec2d6a1055"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectedScript.previewNode (cognitive 19): InjectedScript.previewNode has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (9 pts), boolean chains 4, loops 2 (3 pts), ternaries 2 (3 pts) (nesting depth added 4). 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":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1272}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5caf8f04195b7e12f7a7aa03bb9881b47f0dc645be80b94ebf5bdf371f7fde5"}},{"ruleId":"D2","level":"warning","message":{"text":"ariaSnapshot.findNewNode (cognitive 19): ariaSnapshot.findNewNode has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (12 pts), loops 3 (4 pts), boolean chains 3 (nesting depth added 6). 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":"packages/isomorphic/ariaSnapshot.ts"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"d32baf47d6e8ee806806d7b5cbd36fbe88b1eddd6d0521f2f26b4cfa711acbac"}},{"ruleId":"D2","level":"warning","message":{"text":"EventEmitter._removeAllListeners (cognitive 19): EventEmitter._removeAllListeners has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (15 pts), loops 2 (4 pts) (nesting depth added 7). 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":"packages/playwright-core/src/client/eventEmitter.ts"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fe52727c4de11c8607aff669c87323b41627fc86140c2eb8721caadabac8820"}},{"ruleId":"D2","level":"warning","message":{"text":"BrowserContext.constructor (cognitive 19): BrowserContext.constructor has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 4). Most of this is not in the body itself: 0 of the 19 points are its own statements and the rest belongs to 5 function literals inside it that branch (lines 121, 143, 171, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/browserContext.ts"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"a06adff4112ca2a011cb14181c4fa9c2439127cf134b98121de4e707c0d8bff5"}},{"ruleId":"D2","level":"warning","message":{"text":"crCoverage.convertToDisjointRanges (cognitive 19): crCoverage.convertToDisjointRanges has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (12 pts), ternaries 1 (3 pts), boolean chains 2, loops 2 (nesting depth added 6). Of this number, 16 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. 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":"packages/playwright-core/src/server/chromium/crCoverage.ts"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"213472e2f3b824f11139a09f667157ef4f33431423133a009ee4fb3983c9243a"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameSession._updateViewport (cognitive 19): FrameSession._updateViewport has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (14 pts), ternaries 2 (3 pts), boolean chains 2 (nesting depth added 6). 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":"packages/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":970}}}],"partialFingerprints":{"codehealthFindingId/v1":"85ecd7cbe3e5711b2527417ec80d68847bc234dd8520622513f4f0df1b285919"}},{"ruleId":"D2","level":"warning","message":{"text":"WKPage._onTargetCreated (cognitive 19): WKPage._onTargetCreated has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (11 pts), error handling 2 (5 pts), ternaries 1 (2 pts), boolean chains 1 (nesting depth added 8). 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":"packages/playwright-core/src/server/webkit/wkPage.ts"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a109be620a713ac81ee9b50b1eaa586c098d16df767a15b51947f19b95d6ddb"}},{"ruleId":"D2","level":"warning","message":{"text":"BrowserContext.setStorageState (cognitive 19): BrowserContext.setStorageState has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (13 pts), loops 2 (4 pts), boolean chains 1, error handling 1 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/browserContext.ts"},"region":{"startLine":684}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b91c16b459247fc062361cdaa9a31c96495a3d42a28fad931904c92be711f89"}},{"ruleId":"D2","level":"warning","message":{"text":"Session.deleteData (cognitive 19): Session.deleteData has cognitive complexity 19 (threshold 15). Drivers by points: if/else 4 (12 pts), error handling 1 (3 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 11). Of this number, 18 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"packages/playwright-core/src/tools/cli-client/session.ts"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8bfc0f1a62aa75f65f45d5c4b72a6895ec3d869c54b2c4839047200794ab6af"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleChannel._onMessageInternal (cognitive 18): SimpleChannel._onMessageInternal has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (16 pts), error handling 1 (2 pts) (nesting depth added 7). 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":"browser_patches/firefox/juggler/SimpleChannel.js"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd4750b789f9ce1849a4bfcb3c9850af0f70bad31c2614a74903e999b022b5ee"}},{"ruleId":"D2","level":"warning","message":{"text":"roleUtils.getCSSContent (cognitive 18): roleUtils.getCSSContent has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (11 pts), boolean chains 4, ternaries 2 (3 pts) (nesting depth added 5). 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":"packages/injected/src/roleUtils.ts"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"9db64510d108f3493e06950bfc59579967736f0724c25738b170a6b20c4f1bf1"}},{"ruleId":"D2","level":"warning","message":{"text":"Highlight.updateHighlight (cognitive 18): Highlight.updateHighlight has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 3, boolean chains 2 (nesting depth added 6). 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":"packages/injected/src/highlight.ts"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"3df76cdad5cf1d338dd3412a57d344543ae00dfe40454ab158b75e4e87629683"}},{"ruleId":"D2","level":"warning","message":{"text":"SelectorEvaluatorImpl._querySimple (cognitive 18): SelectorEvaluatorImpl._querySimple has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (14 pts), boolean chains 2, loops 2 (nesting depth added 5). Most of this is not in the body itself: 2 of the 18 points are its own statements and the rest belongs to one function literal inside it that branches (line 231). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorEvaluator.ts"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9c5a7e81cbf6162abb624e2600782e9a1117d5aa1237c70dce87666f1cbe548"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorEvaluator.sortInDOMOrder (cognitive 18): selectorEvaluator.sortInDOMOrder has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (11 pts), loops 3 (5 pts), boolean chains 2 (nesting depth added 6). 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":"packages/injected/src/selectorEvaluator.ts"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c4f7947b333a067f46efb1740fb05d253b6939a5b4472d5b69f0ff2920ca7a5"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorGenerator.generateSelector (cognitive 18): selectorGenerator.generateSelector has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (13 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 8). 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":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fad70fa8d779faf790359171d78159a3731fecc9511324ec23689df5172ae69"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorGenerator.isGuidLike (cognitive 18): selectorGenerator.isGuidLike has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (11 pts), boolean chains 6, loops 1 (nesting depth added 4). 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":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"bce66fa4d97d5f1680788d05face5f59f547bec2609f2fd044d9adc7ce3e8a50"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectedScript.retarget (cognitive 18): InjectedScript.retarget has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (12 pts), boolean chains 5, ternaries 1 (nesting depth added 4). 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":"packages/injected/src/injectedScript.ts"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"5112412b4264d2421c7ac6a3f716328e424a5edd241f190aea6f5233d5ec216d"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectedScript.setupHitTargetInterceptor (cognitive 18): InjectedScript.setupHitTargetInterceptor has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (10 pts), boolean chains 7, ternaries 1 (nesting depth added 1). Most of this is not in the body itself: 6 of the 18 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 1162, 1188). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1135}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a9d3f8426a79b52dbe46feddfa1525de85ed80570482d26e4d1877f849ebf9b"}},{"ruleId":"D2","level":"warning","message":{"text":"RecordActionTool.onInput (cognitive 18): RecordActionTool.onInput has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (7 pts), ternaries 3 (6 pts), boolean chains 5 (nesting depth added 4). 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":"packages/injected/src/recorder/recorder.ts"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a9df69a228783b61aca3d272b7f2f2aa2c8b20c26d8d4f3189f66ec1a4c59d0"}},{"ruleId":"D2","level":"warning","message":{"text":"dependencies.validateDependenciesLinux (cognitive 18): dependencies.validateDependenciesLinux has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (6 pts), loops 5 (6 pts), boolean chains 4, ternaries 2 (nesting depth added 2). 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":"packages/playwright-core/src/server/registry/dependencies.ts"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"8adb19f49150e4390a647cf765c96e6048c26cfe30b696ff226e06bc6685312a"}},{"ruleId":"D2","level":"warning","message":{"text":"Registry.resolveBrowsers (cognitive 18): Registry.resolveBrowsers has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (15 pts), boolean chains 2, loops 1 (nesting depth added 5). Of this number, 14 points are the body\u0027s own statements and 4 belong to one function literal inside it that branches. 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":"packages/playwright-core/src/server/registry/index.ts"},"region":{"startLine":1280}}}],"partialFingerprints":{"codehealthFindingId/v1":"eee67bc70857cf4b26e0cd974a5c59c0e614bcb3c914b2acdbf20c66a89392f0"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameSelectors._queryFrames (cognitive 18): FrameSelectors._queryFrames has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (8 pts), boolean chains 4, ternaries 3 (4 pts), loops 2 (nesting depth added 3). Most of this is not in the body itself: 3 of the 18 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 189, 187, 216). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frameSelectors.ts"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"b091af52dd04c2fbbdbda3f61c5d742481f7df5db73ad4e755b960d91522c2a0"}},{"ruleId":"D2","level":"warning","message":{"text":"HarTracer.stop (cognitive 18): HarTracer.stop has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (9 pts), boolean chains 5, loops 1 (2 pts), ternaries 2 (nesting depth added 5). 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":"packages/playwright-core/src/server/har/harTracer.ts"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a425eb9f699b6331d66ccd7069ec6f54d4ac3eb7d63c5324e476d6de179f478"}},{"ruleId":"D2","level":"warning","message":{"text":"InterceptableRequest.createResponseBodyCallback (cognitive 18): InterceptableRequest.createResponseBodyCallback has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (9 pts), ternaries 4 (6 pts), boolean chains 2, loops 1 (nesting depth added 4). Most of this is not in the body itself: 0 of the 18 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 595, 619). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crNetworkManager.ts"},"region":{"startLine":594}}}],"partialFingerprints":{"codehealthFindingId/v1":"662cba79968b72a17eaa1cc6d61eeeba58e23fb5023ce26314f420bae6b17155"}},{"ruleId":"D2","level":"warning","message":{"text":"Electron.launch (cognitive 18): Electron.launch has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (11 pts), boolean chains 3, error handling 2 (3 pts), ternaries 1 (nesting depth added 4). 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":"packages/playwright-core/src/server/electron/electron.ts"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d98d7cdf508af3f87eb6f733cfbb02696c61161cb19f813900c74792d62a1dc"}},{"ruleId":"D2","level":"warning","message":{"text":"FFBrowserContext.initialize (cognitive 18): FFBrowserContext.initialize has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, boolean chains 3, ternaries 1 (2 pts) (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/firefox/ffBrowser.ts"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"f875fd62df748e96e06e01ddab90aa1844133a087dbdfe2e6c4960d38cb03ef4"}},{"ruleId":"D2","level":"warning","message":{"text":"callTab.propertyToString (cognitive 18): callTab.propertyToString has cognitive complexity 18 (threshold 15). Drivers by points: boolean chains 9, if/else 7, ternaries 1 (2 pts) (nesting depth added 1). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/callTab.tsx"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"01bfb771cca4750ce36673d85da32c2eb3302cf39dd571c46c61959f62e0456a"}},{"ruleId":"D2","level":"warning","message":{"text":"ariaModeView.AriaModeView (cognitive 18): ariaModeView.AriaModeView has cognitive complexity 18 (threshold 15). Drivers by points: boolean chains 8, ternaries 6, if/else 4. Of this number, 14 points are the body\u0027s own statements and 4 belong to 3 function literals inside it that branch. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/ariaModeView.tsx"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"0516404cbdd45dac6e0e5f3c50b381878c40897935b03a50188ea19a45e36c73"}},{"ruleId":"D2","level":"warning","message":{"text":"imageDiffView.ImageDiffView (cognitive 18): imageDiffView.ImageDiffView has cognitive complexity 18 (threshold 15). Drivers by points: boolean chains 14, ternaries 4. Of this number, 16 points are the body\u0027s own statements and 2 belong to 2 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/shared/imageDiffView.tsx"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a15f09115a899a0c9854903ce03cf8dd80d23247902f7f7737c3fd539c119c4"}},{"ruleId":"D2","level":"warning","message":{"text":"Member.filterForLanguage (cognitive 18): Member.filterForLanguage has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (8 pts), boolean chains 7, error handling 1 (2 pts), loops 1 (nesting depth added 3). 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":"utils/doclint/documentation.js"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a2a665d1e9ac144349d675a4d33ea4611978e9a544ef99523d93a2bd584aa51"}},{"ruleId":"D2","level":"warning","message":{"text":"innerCheckDeps::calculateDeps (cognitive 18): innerCheckDeps::calculateDeps has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (12 pts), boolean chains 3, loops 2 (3 pts) (nesting depth added 5). 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":"utils/check_deps.js"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7d16e19aa70635f869f707ec2391e601bef97115567eacb8b0c72e47f0decfc"}},{"ruleId":"D2","level":"warning","message":{"text":"_innerRenderNodes (cognitive 18): _innerRenderNodes has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (11 pts), boolean chains 6, other 1 (nesting depth added 1). Most of this is not in the body itself: 0 of the 18 points are its own statements and the rest belongs to 2 function items inside it that branch ((anonymous), handleListItem). Those helpers are already separate functions, so extracting the branching again is not available. To reduce it, move them out of the body to the enclosing scope, where each is measured, reviewed and tested on its own, and reduce whichever one then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/dotnetXmlDocumentation.js"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c4ff08ad0e1ca9539da82c2b1ea9917c072ede424dec9fba03c3a0dea69958d"}},{"ruleId":"D2","level":"warning","message":{"text":"parseTypeExpression (cognitive 18): parseTypeExpression has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (12 pts), ternaries 1 (3 pts), boolean chains 2, loops 1 (nesting depth added 7). 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":"utils/doclint/documentation.js"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac575192b251893df1da5e63752c10e728375f22286d15d7636567f3d7a07381"}},{"ruleId":"D2","level":"warning","message":{"text":"NetworkObserver.responseHead (cognitive 17): NetworkObserver.responseHead has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (10 pts), error handling 3 (5 pts), boolean chains 2 (nesting depth added 7). 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":"browser_patches/firefox/juggler/NetworkObserver.js"},"region":{"startLine":971}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac30e3f14fc60acb3b39e7ec07fa1700af04625e103788ae1662302d8076ef04"}},{"ruleId":"D2","level":"warning","message":{"text":"selectorUtils.matchesAttributePart (cognitive 17): selectorUtils.matchesAttributePart has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (10 pts), boolean chains 5, ternaries 2 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorUtils.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ea0a88d302ac4f6e7d5b1ed399d05c3db87f6eda313954da5bf378ac0ebea7b"}},{"ruleId":"D2","level":"warning","message":{"text":"injectedScript.createTextMatcher (cognitive 17): injectedScript.createTextMatcher has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (10 pts), boolean chains 6, ternaries 1 (nesting depth added 2). Of this number, 14 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1780}}}],"partialFingerprints":{"codehealthFindingId/v1":"31146792838c389d1682d145d10d3fcfd244d0a3925ecd1b1449af24175ead71"}},{"ruleId":"D2","level":"warning","message":{"text":"ClockController._replayLogOnce (cognitive 17): ClockController._replayLogOnce has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 2, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/clock.ts"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca22c0a1acb8b4bc27db9943e8b0d873300c467a86b0f386c977c282e1a1873"}},{"ruleId":"D2","level":"warning","message":{"text":"java.formatContextOptions (cognitive 17): java.formatContextOptions has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, ternaries 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/codegen/java.ts"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a6f60cec4642a6d507a01c329ff641cee2bdffe1c64cd2fc3bb078bcf665ce3"}},{"ruleId":"D2","level":"warning","message":{"text":"imageUtils.scaleImageToSize (cognitive 17): imageUtils.scaleImageToSize has cognitive complexity 17 (threshold 15). Drivers by points: loops 5 (8 pts), boolean chains 3, if/else 3, ternaries 2 (3 pts) (nesting depth added 4). Of this number, 14 points are the body\u0027s own statements and 3 belong to one function literal inside it that branches. To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/imageUtils.ts"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"06376ad171963e7e8bae933d6ac53963501ddc7b399382040f4ea49bfc1a4372"}},{"ruleId":"D2","level":"warning","message":{"text":"ChannelOwner._wrapApiCall (cognitive 17): ChannelOwner._wrapApiCall has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (10 pts), boolean chains 4, ternaries 1 (2 pts), error handling 1 (nesting depth added 4). 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":"packages/playwright-core/src/client/channelOwner.ts"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"430379de4e3b2d76ea6f53b82441488807e6abb1d2df09f58873db216d693f5e"}},{"ruleId":"D2","level":"warning","message":{"text":"FrameSelectors.resolveFramesForSelector (cognitive 17): FrameSelectors.resolveFramesForSelector has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (7 pts), boolean chains 4, ternaries 2 (4 pts), loops 2 (nesting depth added 5). Of this number, 11 points are the body\u0027s own statements and 6 belong to one function literal inside it that branches. 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":"packages/playwright-core/src/server/frameSelectors.ts"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"15c9f95b8b6c7e8b8ff971f0cf1b244da4812de5b3260d3e76c0d735fa4f67bf"}},{"ruleId":"D2","level":"warning","message":{"text":"DispatcherConnection.dispatch (cognitive 17): DispatcherConnection.dispatch has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11 (14 pts), error handling 2, boolean chains 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dispatchers/dispatcher.ts"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"bade90b364391eef0bf76a685096bc8d087f017a10baaea14e86acd81ccc9798"}},{"ruleId":"D2","level":"warning","message":{"text":"Credentials._handleGet (cognitive 17): Credentials._handleGet has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (9 pts), boolean chains 4, loops 2 (4 pts) (nesting depth added 6). 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":"packages/playwright-core/src/server/credentials.ts"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f01a52bbfcd877caf305ab854ffa28bebf7488fc30e72c9d76c6f13cf63078"}},{"ruleId":"D2","level":"warning","message":{"text":"traceViewer.startTraceViewerServer (cognitive 17): traceViewer.startTraceViewerServer has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 2, error handling 1 (nesting depth added 3). Most of this is not in the body itself: 5 of the 17 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 94, 134, 145). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/viewer/traceViewer.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"5856ab1bcc47aad8d80b8b424aa1ba49e6c18094472069f15d60852d5f51950c"}},{"ruleId":"D2","level":"warning","message":{"text":"ContextDebugger._updateSource (cognitive 17): ContextDebugger._updateSource has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (9 pts), boolean chains 4, ternaries 2 (4 pts) (nesting depth added 4). Of this number, 16 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"packages/playwright-core/src/tools/dashboard/dashboardController.ts"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"97a8e21ab3bee4d761f9993283c39e0ff8992522cc42c88e7cfddf901be3e73a"}},{"ruleId":"D2","level":"warning","message":{"text":"network.httpRequest (cognitive 17): network.httpRequest has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (12 pts), boolean chains 4, ternaries 1 (nesting depth added 3). Of this number, 13 points are the body\u0027s own statements and 4 belong to 2 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/network.ts"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"e90cfbe51f0d88e92c4eb7c46a0fe8fdf4e6bacf74c5e74c03ebf5427350e3a6"}},{"ruleId":"D2","level":"warning","message":{"text":"Type.parse (cognitive 17): Type.parse has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (15 pts), boolean chains 1, loops 1 (nesting depth added 7). 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":"utils/doclint/documentation.js"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dc7de1445c72ad8cb2d1e6118b6f207664dc60af1786b39ce4b5fb50064bc0b"}},{"ruleId":"D2","level":"warning","message":{"text":"innerCheckDeps::allowImport (cognitive 17): innerCheckDeps::allowImport has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (12 pts), boolean chains 3, loops 1, ternaries 1 (nesting depth added 5). 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":"utils/check_deps.js"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"52c2b169d625f2f611cadc20fc3b39994960e75551082d435b52f0dd0f9bfad6"}},{"ruleId":"D2","level":"warning","message":{"text":"constructor (cognitive 17): constructor has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (9 pts), ternaries 2 (4 pts), loops 3, boolean chains 1 (nesting depth added 5). Of this number, 15 points are the body\u0027s own statements and 2 belong to 10 function literals inside it that branch. 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":"browser_patches/firefox/juggler/content/PageAgent.js"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"c03b392ebf5d142f4cb415516be66d8e1bfc1666b6c77070edf46d3caec9104c"}},{"ruleId":"D2","level":"warning","message":{"text":"observe (cognitive 17): observe has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (16 pts), match/switch 1 (nesting depth added 8). Most of this is not in the body itself: 7 of the 17 points are its own statements and the rest belongs to 5 function items inside it that branch (loadStyleSheet, receiveMessage, disconnected, \u2026). Those helpers are already separate functions, so extracting the branching again is not available. To reduce it, move them out of the body to the enclosing scope, where each is measured, reviewed and tested on its own, and reduce whichever one then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/components/Juggler.js"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"269f88bc0d19d2b529875437128cad6bd741f99cb6aa71811f4a7fc9d208a1f2"}},{"ruleId":"D2","level":"warning","message":{"text":"roleUtils.isElementHiddenForAria (cognitive 16): roleUtils.isElementHiddenForAria has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (9 pts), boolean chains 5, loops 1 (2 pts) (nesting depth added 5). 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":"packages/injected/src/roleUtils.ts"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"93477cd3342ec9d9c2d94e52f4853bcda9cc677d1c224e5886f573867dad2173"}},{"ruleId":"D2","level":"warning","message":{"text":"Highlight._ensureElementHighlightRaf (cognitive 16): Highlight._ensureElementHighlightRaf has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 4 (10 pts), loops 2 (3 pts), error handling 1 (2 pts), if/else 1 (nesting depth added 8). Most of this is not in the body itself: 1 of the 16 points is its own statement and the rest belongs to one function literal inside it that branches (line 145). The decisions are inside the literal, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literal\u0027s work into a named function or method at the enclosing scope and have the literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/highlight.ts"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd80914f541d6e808687b1a20320edba988b63f06568cb51c12bf4da266b54ef"}},{"ruleId":"D2","level":"warning","message":{"text":"clock.install (cognitive 16): clock.install has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (13 pts), boolean chains 1, loops 1, ternaries 1 (nesting depth added 4). 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":"packages/injected/src/clock.ts"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"dccab4e1d54835fc87a2ee51e84bca8f91f32ea45dc51569f91807a11d49501f"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyParser._readAttributes (cognitive 16): KeyParser._readAttributes has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 2 (5 pts), boolean chains 2 (nesting depth added 8). 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":"packages/isomorphic/ariaSnapshot.ts"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbd88d387ce249261ddc42a6d5ccd7573ef9e90cd7ab5268a4e9a280044b480e"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceModernizer._modernize_9_to_10 (cognitive 16): TraceModernizer._modernize_9_to_10 has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (12 pts), boolean chains 3, loops 1 (nesting depth added 7). 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":"packages/isomorphic/trace/traceModernizer.ts"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"5761fdd45fc623d2d459ffe9243d19bcdc3b7b407dd62f285a3cd1a7c89c0324"}},{"ruleId":"D2","level":"warning","message":{"text":"EventEmitter._addListener (cognitive 16): EventEmitter._addListener has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (15 pts), boolean chains 1 (nesting depth added 5). 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":"packages/playwright-core/src/client/eventEmitter.ts"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee5e67295b64c984995a17c4d9b7fa74ae15dcd4a6510f6250477acc0eee8da7"}},{"ruleId":"D2","level":"warning","message":{"text":"Registry.install (cognitive 16): Registry.install has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (9 pts), ternaries 1 (3 pts), boolean chains 2, error handling 1, loops 1 (nesting depth added 5). 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":"packages/playwright-core/src/server/registry/index.ts"},"region":{"startLine":934}}}],"partialFingerprints":{"codehealthFindingId/v1":"0563621ce38ad680c63ffe22a422b2dd4cef9a0b6507d0dbcb668c563d7f52a9"}},{"ruleId":"D2","level":"warning","message":{"text":"fileUploadUtils.prepareFilesForUpload (cognitive 16): fileUploadUtils.prepareFilesForUpload has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (11 pts), boolean chains 3, loops 1 (2 pts) (nesting depth added 4). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"packages/playwright-core/src/server/fileUploadUtils.ts"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab5ef1fc9c07b2f8bd1d789a1eac7dab2cb00abe40600335d36df5ff6281761b"}},{"ruleId":"D2","level":"warning","message":{"text":"instrumentation.createInstrumentation (cognitive 16): instrumentation.createInstrumentation has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (11 pts), boolean chains 2, loops 2, ternaries 1 (nesting depth added 3). Most of this is not in the body itself: 0 of the 16 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 159, 140, 144). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/instrumentation.ts"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"67a41387582443ce4025e14ead6fd733cbadc6185fd51e242014dae432f5eb02"}},{"ruleId":"D2","level":"warning","message":{"text":"program.collectList (cognitive 16): program.collectList has cognitive complexity 16 (threshold 15). Drivers by points: if/else 3 (6 pts), ternaries 2 (6 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 8). 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":"packages/playwright-core/src/tools/cli-client/program.ts"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"99950bb4d4c75d1c120577534b26e24ef9b6e211dbdcb8b5c1cc0f5e41cfce67"}},{"ruleId":"D2","level":"warning","message":{"text":"attachmentsTab.AttachmentsTab (cognitive 16): attachmentsTab.AttachmentsTab has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 6, if/else 4 (6 pts), ternaries 3, loops 1 (nesting depth added 2). Most of this is not in the body itself: 4 of the 16 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 97, 125, 145). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/attachmentsTab.tsx"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0a0db743b8ca21f6dd08621bf82561bda9d2ead4588daada9d0eedcebb1ee0d"}},{"ruleId":"D2","level":"warning","message":{"text":"networkResourceDetails.dumpHex (cognitive 16): networkResourceDetails.dumpHex has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (8 pts), ternaries 1 (4 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 8). 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":"packages/trace-viewer/src/ui/networkResourceDetails.tsx"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"069c65ad6ab74fd590f4bc193155c686df1c7cc93fa73dc1b4f13f226d423088"}},{"ruleId":"D2","level":"warning","message":{"text":"networkTab.renderCell (cognitive 16): networkTab.renderCell has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, ternaries 3 (7 pts) (nesting depth added 4). 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":"packages/trace-viewer/src/ui/networkTab.tsx"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"f08e353f9358b6b7ba0c85fb28998f4608cd7e62a1d2656594229616aab5b867"}},{"ruleId":"D2","level":"warning","message":{"text":"snapshotTab.SnapshotView (cognitive 16): snapshotTab.SnapshotView has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (10 pts), boolean chains 3, error handling 1 (2 pts), ternaries 1 (nesting depth added 3). Most of this is not in the body itself: 2 of the 16 points are its own statements and the rest belongs to 2 function literals inside it that branch (lines 146, 193). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/snapshotTab.tsx"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f831af4e38a37b7ba7adbf2cba1b5a6cb858d24d631f4008d432c295211ca28"}},{"ruleId":"D2","level":"warning","message":{"text":"ImageChannel.intoRGB (cognitive 16): ImageChannel.intoRGB has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 2 (8 pts), if/else 2 (4 pts), loops 2 (3 pts), boolean chains 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":"packages/utils/image_tools/imageChannel.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"05beacb540e1412e9b2bc1045f6a1d51d6da513b8ee464bfac5cb47eb5c34a28"}},{"ruleId":"D2","level":"warning","message":{"text":"comparators.compareImages (cognitive 16): comparators.compareImages has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 4, ternaries 2. Of this number, 14 points are the body\u0027s own statements and 2 belong to one function literal inside it that branches. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/comparators.ts"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"6510003c4ac8af58b3cdb79cbe378779b9bcb1b4d160c6a5947bd6c8548a1ec5"}},{"ruleId":"D2","level":"warning","message":{"text":"socksProxy.parsePattern (cognitive 16): socksProxy.parsePattern has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (10 pts), boolean chains 5, ternaries 1 (nesting depth added 1). Most of this is not in the body itself: 1 of the 16 points is its own statement and the rest belongs to 5 function literals inside it that branch (lines 338, 366, 347, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/socksProxy.ts"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a2670b2277ee5447552ad5ead46a292bf8157f14af7a35ab06ec361861f2b45"}},{"ruleId":"D2","level":"warning","message":{"text":"treeView.TreeItemHeader (cognitive 16): treeView.TreeItemHeader has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 9, if/else 4, ternaries 3. Of this number, 12 points are the body\u0027s own statements and 4 belong to 2 function literals inside it that branch. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/treeView.tsx"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb9b47ee0872b859a4003b4a9d1b2f129e67e0d549a38d8d6935b7da92760b71"}},{"ruleId":"D2","level":"warning","message":{"text":"markdown.flattenWrappedLines (cognitive 16): markdown.flattenWrappedLines has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (8 pts), boolean chains 4, ternaries 1 (3 pts), loops 1 (nesting depth added 5). 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":"utils/markdown.js"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"d54ccab5ad6aa0d09b1e3db8609cea596de5df9dcaa9733886b8a1cab32fe332"}},{"ruleId":"D2","level":"warning","message":{"text":"linkUtils.renderJSSignature (cognitive 16): linkUtils.renderJSSignature has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), boolean chains 3, loops 1 (nesting depth added 5). 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":"utils/doclint/linkUtils.js"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc8bd043647af9ee0845f02b02ae05ffdcbf4b3d03ba438ac04d00104eb067f9"}},{"ruleId":"D2","level":"warning","message":{"text":"TypesGenerator.generateTypes (cognitive 16): TypesGenerator.generateTypes has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (11 pts), boolean chains 4, ternaries 1 (nesting depth added 1). Most of this is not in the body itself: 1 of the 16 points is its own statement and the rest belongs to 5 function literals inside it that branch (lines 95, 114, 87, \u2026). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_types/index.js"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"03fbd49cbc416cbf1c8480166859a5e7e284887848bd46750dd1d70118e625c0"}},{"ruleId":"D2","level":"warning","message":{"text":"Workspace.ensureConsistent (cognitive 16): Workspace.ensureConsistent has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 3 (5 pts), boolean chains 2 (nesting depth added 7). Of this number, 15 points are the body\u0027s own statements and 1 belongs to one function literal inside it that branches. 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":"utils/workspace.js"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"70a1a03d8c85c97e903d2077009d5e58f1bb495625fae46389de42c8a5f40e2f"}},{"ruleId":"D2","level":"warning","message":{"text":"(computed) (cognitive 16): (computed) has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (6 pts), boolean chains 4, ternaries 2 (3 pts), error handling 1 (2 pts), loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/PageHandler.js"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"d15ae869bfb5ba8283386571035649b3c449d2eccd17683f24af476d4e0aa479"}},{"ruleId":"D2","level":"warning","message":{"text":"constructor (cognitive 16): constructor has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (9 pts), loops 2 (3 pts), boolean chains 2, ternaries 2 (nesting depth added 3). Most of this is not in the body itself: 1 of the 16 points is its own statement and the rest belongs to 7 function items inside it that branch (webSocketClosed, frameReceived, frameSent, \u2026). Those helpers are already separate functions, so extracting the branching again is not available. To reduce it, move them out of the body to the enclosing scope, where each is measured, reviewed and tested on its own, and reduce whichever one then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/content/FrameTree.js"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"b306a6cf52c02927882f39838b5e49898f3751cff4045006d7390832306fb0a4"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: snapshotterInjected.frameSnapshotStreamer: FunctionTooLong \u2014 frameSnapshotStreamer runs 473 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 373 over it, 4.73\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1924d0fa649d1e21418c8f92bcbfaa726549522b01a0dfae65cba82d82e58ea"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Page: TooManyMethods \u2014 124 methods. The bar is 30 methods; this is 94 over it, 4.13\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/page.ts"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f279303ce0da923bfee449fd19ede736678c080942d3affa4f0c58c7a93e02e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: cssTokenizer.tokenize: FunctionTooLong \u2014 tokenize runs 377 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 277 over it, 3.77\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/cssTokenizer.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"40dbed5a65a1cd308994ae57bff53b3efeb6336e8a65635e9d3fa2c0b37e06e5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Frame: TooManyMethods \u2014 102 methods. The bar is 30 methods; this is 72 over it, 3.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bc4a60d9fb102807ff43b5d173ebfb683d7f5d0d8d3ecf6d6749aeb87127d90"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WKPage: TooManyMethods \u2014 92 methods. The bar is 30 methods; this is 62 over it, 3.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/wkPage.ts"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee8c1a4c832f6a7980a665a66d795d53c2055a4ad07a34c07f09ca7e9924e2e0"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: dashboard.Dashboard: FunctionTooLong \u2014 Dashboard runs 305 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 205 over it, 3.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/dashboard.tsx"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"7306f8f48ed5f64db784f0a950ac377fdf1ca96ac9f139259ea33d23956aa909"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: WVPage: TooManyMethods \u2014 90 methods. The bar is 30 methods; this is 60 over it, 3.00\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvPage.ts"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c5a847c53e27b74e9c53f1072321f759eae575cc5c369f4dd6fc1f44f0c8fa1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: annotations.Annotations: FunctionTooLong \u2014 Annotations runs 298 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 198 over it, 2.98\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/annotations.tsx"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e768c1881bd885e215b1c50c1f67ef268717f54ed18f415df5098dd637c154b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: InjectedScript: ClassTooLong \u2014 1161 significant lines (blank, comment-only and punctuation-only lines excluded), 77 methods. The bar is 400 significant lines; this is 761 over it, 2.90\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d6a604b05a5dca6c80f4576307cfee977adddc91b29bf0956e9e725bf2161a9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: workbench.PartitionedWorkbench: FunctionTooLong \u2014 PartitionedWorkbench runs 284 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 184 over it, 2.84\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/workbench.tsx"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"42861e9ee7990016acc9272aa0b050371f016d59a074bd4db1a2979307bca9a7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/injectedScript.ts: FileTooLong \u2014 1351 significant lines (blank, comment-only and punctuation-only lines excluded), about 86% of them inside a single declaration: InjectedScript (92-1745). The bar is 500 significant lines; this is 851 over it, 2.70\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a4e885911f6fc769851a3e329873a508b1d45e082e6140e89826bb9540c73c6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/frames.ts: FileTooLong \u2014 1340 significant lines (blank, comment-only and punctuation-only lines excluded), about 72% of them inside a single declaration: Frame (513-1861). The bar is 500 significant lines; this is 840 over it, 2.68\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e148c2d48e563e23051d1d80c8c7a9482f1c525f6c04d2397033e647ac6142f2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Locator: TooManyMethods \u2014 78 methods. The bar is 30 methods; this is 48 over it, 2.60\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/locator.ts"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1a7ee13e60c3bb01c4aad1f1aba641628f198be343fa93ef22bce80fb37420b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Registry.constructor: MethodTooLong \u2014 constructor runs 259 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 159 over it, 2.59\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/registry/index.ts"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"139c408eceef49e9269ba62f985c1b07a702949ed3634392197653e72a4885e4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InjectedScript: TooManyMethods \u2014 77 methods. The bar is 30 methods; this is 47 over it, 2.57\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d329150c842d77d3dfa99f570fbdbc29b6068c5b3e84dec55fdcb1f06dabd5d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: recorder/recorder.ts: FileTooLong \u2014 1274 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 774 over it, 2.55\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/recorder/recorder.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"277bd7806aee5eafbc561da59c1178b4cb5858f50193130e67f5b5b3e47a4924"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Page: TooManyMethods \u2014 75 methods. The bar is 30 methods; this is 45 over it, 2.50\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/page.ts"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f136931d0fb2d0c9eeb85ac8fb932d81c08edfe107820248eda432a1bd9608d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: APIRequestContext._sendRequest: MethodTooLong \u2014 _sendRequest runs 250 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 150 over it, 2.50\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/fetch.ts"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e1617020fe22d30df22957d1a0b84a84dbe83cc508bdee8717f500ba957ef25"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BrowserContext: TooManyMethods \u2014 74 methods. The bar is 30 methods; this is 44 over it, 2.47\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/browserContext.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9e87053ff9a6ae5b98c353a67f09c4d8f2527cb3bcc64de42581847410a83eb"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Streamer.captureSnapshot: MethodTooLong \u2014 captureSnapshot runs 241 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 141 over it, 2.41\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"204381f673495f622770bd76b78981e4a7df7667e359cc7e3365320299c39333"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Frame: ClassTooLong \u2014 960 significant lines (blank, comment-only and punctuation-only lines excluded), 102 methods. The bar is 400 significant lines; this is 560 over it, 2.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"39c8a685706846d6b6f4b18500d8debbf98f1f3af4d1a69769a17a928fd0e513"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Frame: TooManyMethods \u2014 72 methods. The bar is 30 methods; this is 42 over it, 2.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/frame.ts"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"92115374e0cac5cd1c6380f172e2874f7b9a09e66e8bbeaf63028e2fb9946919"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ElementHandle: TooManyMethods \u2014 71 methods. The bar is 30 methods; this is 41 over it, 2.37\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dom.ts"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"20db23d36ef3896ec2bbddcba4893a3d37e92bb5b28674a2ff1732708a409fe9"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: webSocketMock.inject: FunctionTooLong \u2014 inject runs 231 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 131 over it, 2.31\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/webSocketMock.ts"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dc74a647332b6f9fc66fc39accae6b912943f7d927281146ecda42a9655edca"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PageDispatcher: TooManyMethods \u2014 67 methods. The bar is 30 methods; this is 37 over it, 2.23\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dispatchers/pageDispatcher.ts"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"f44772338536013bbff61a5472b6084c3499dde7099cebf7fc91278d967fb3b4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FFPage: TooManyMethods \u2014 66 methods. The bar is 30 methods; this is 36 over it, 2.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/firefox/ffPage.ts"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"81120baca0e391341d436542820b64119ca3c488b73d4a4f81d579860cac5946"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: registry/index.ts: FileTooLong \u2014 1099 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 599 over it, 2.20\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/registry/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"658cfba18597367937df79a8e6ebf718d3011350eab41b3a3d2fc97cd4f84b4f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: snapshotRenderer.snapshotScript: FunctionTooLong \u2014 snapshotScript runs 218 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 118 over it, 2.18\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/snapshotRenderer.ts"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"207999f5138369c93dccd40b8821afc60d21d1560fe43775045b3897b661e006"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: WKPage: ClassTooLong \u2014 849 significant lines (blank, comment-only and punctuation-only lines excluded), 92 methods. The bar is 400 significant lines; this is 449 over it, 2.12\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/wkPage.ts"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"f51261e878ee85a6b90337ce9ee3e1d7768a1aea72fc5fab7ce058363e5fae6a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: cli-daemon/commands.ts: FileTooLong \u2014 1056 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 556 over it, 2.11\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-daemon/commands.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecf52a9baa1243a5abdf601e9f30a18e53c061386dbfc3c9be7f5c8eb2f524b8"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: WVPage: ClassTooLong \u2014 820 significant lines (blank, comment-only and punctuation-only lines excluded), 90 methods. The bar is 400 significant lines; this is 420 over it, 2.05\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvPage.ts"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"b79d6967c7c11f79b0dcc949bbac874fd41450ddfa9723ea5775a3a9d97e4056"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BidiPage: TooManyMethods \u2014 61 methods. The bar is 30 methods; this is 31 over it, 2.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiPage.ts"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"2230b975f92d65eee57b696fc1822a689cd37eb275ccd2030492a69ee54e9cad"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: recorder.Recorder: FunctionTooLong \u2014 Recorder runs 203 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 103 over it, 2.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/recorder/src/recorder.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"132242fa97f0d1478a382f26adb1348043f5a3f4242310b943427bda5fb2dfdf"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: roleUtils.getTextAlternativeInternal: FunctionTooLong \u2014 getTextAlternativeInternal runs 194 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 94 over it, 1.94\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleUtils.ts"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"034a0a8e3a8f62a38e9fbc5cbec15c08cb95f9579b92e6f27174af8b1cdfd706"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: webkit/wkPage.ts: FileTooLong \u2014 933 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: WKPage (56-1268). The bar is 500 significant lines; this is 433 over it, 1.87\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/wkPage.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa154ffac642308b10edd1115a699932609e8ca0e9f0d01c7f5349067f79ef53"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: webview/wvPage.ts: FileTooLong \u2014 930 significant lines (blank, comment-only and punctuation-only lines excluded), about 88% of them inside a single declaration: WVPage (54-1218). The bar is 500 significant lines; this is 430 over it, 1.86\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvPage.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e144d34fa2130fa58a1d037b6691cab03dd999da17c44ef2c005cb738850b38d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BrowserContext: TooManyMethods \u2014 55 methods. The bar is 30 methods; this is 25 over it, 1.83\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/browserContext.ts"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e6953ff5c463f9f3ed0da7f219cedb2f1e274397b37ca1375c871f36bb9f725"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: juggler/TargetRegistry.js: FileTooLong \u2014 906 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units). The bar is 500 significant lines; this is 406 over it, 1.81\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/TargetRegistry.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94ceec976e7fd5be9ae4ee0703cf17b12cb5b9c989bfa63b78c6c9eef52229ab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PageTarget: TooManyMethods \u2014 54 methods. The bar is 30 methods; this is 24 over it, 1.80\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/TargetRegistry.js"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbdb9519bc6ff9c0f403e34fe311985d76bf503dedf1ad174e932cecfab448b1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FrameSession: TooManyMethods \u2014 53 methods. The bar is 30 methods; this is 23 over it, 1.77\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f44fec410d0068bb65d6ff51b3848cb9cfc4931f96483d54b319ba68ba84389"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FrameDispatcher: TooManyMethods \u2014 53 methods. The bar is 30 methods; this is 23 over it, 1.77\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dispatchers/frameDispatcher.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"56a8c00fcca9aa4d1deec52fc909aee9f7b67538b59ea59f76ed9fc045797594"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Tracing: TooManyMethods \u2014 53 methods. The bar is 30 methods; this is 23 over it, 1.77\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/recorder/tracing.ts"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"d55e45f000f5def37f67537d8116cd754522a4879a5ebbd70f69b2612517680e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PageHandler: TooManyMethods \u2014 52 methods. The bar is 30 methods; this is 22 over it, 1.73\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/PageHandler.js"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"323e438abfbd661e2aa0b3e0b2d87062fb2383330594818eae6cf4dc84056dd2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/roleUtils.ts: FileTooLong \u2014 862 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 362 over it, 1.72\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleUtils.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f24e23d6bea3206eac487a8fad8fc76773747db525ac014af3c4cf4883e03446"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: program.decorateProgram: FunctionTooLong \u2014 decorateProgram runs 172 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 72 over it, 1.72\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/cli/program.ts"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab99dfdf6198f74c618ccf18d942ab7e53305889250d322f7a239766aa93f1f7"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: program.program: FunctionTooLong \u2014 program runs 171 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 71 over it, 1.71\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/program.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bafeb6e2e6afb0e0b5462aa5afea13b99c3553b200c402b32ef8d22653bde3a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: chromium/crPage.ts: FileTooLong \u2014 851 significant lines (blank, comment-only and punctuation-only lines excluded), about 65% of them inside a single declaration: FrameSession (400-1202). The bar is 500 significant lines; this is 351 over it, 1.70\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d7d3fc37d7dae6c42f40cf6943a264deee8b968e8c581ee84d36f47b140098a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: cli.run: FunctionTooLong \u2014 run runs 169 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 69 over it, 1.69\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/cli.js"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9fdc4d0c5f8c50e9ad4708fa72c666f9b96ec81f1a5981ac15bd25270f7ada1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/page.ts: FileTooLong \u2014 821 significant lines (blank, comment-only and punctuation-only lines excluded), about 68% of them inside a single declaration: Page (166-977). The bar is 500 significant lines; this is 321 over it, 1.64\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/page.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"08daf30bd33d53f32ad5a5142ef47a23acd8aa2d12f4eca430d2ae2864c941d8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: check_deps.innerCheckDeps: FunctionTooLong \u2014 innerCheckDeps runs 163 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 63 over it, 1.63\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/check_deps.js"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"a81f8a0bf113f8d847a671acd6fee66893511309f4998e27ef61a0545031fb19"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: playbackControl.usePlayback: FunctionTooLong \u2014 usePlayback runs 158 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 58 over it, 1.58\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/playbackControl.tsx"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"1337276fb523c62b22fadaee62b0ff765a6d9a2361186c13054108a5ed37e07d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Registry: ClassTooLong \u2014 629 significant lines (blank, comment-only and punctuation-only lines excluded), 28 methods. The bar is 400 significant lines; this is 229 over it, 1.57\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/registry/index.ts"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"f12e2aba6f2b6e1f9b9b849b7613a274078fa3b934cf496294c18e08295e288a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CRPage: TooManyMethods \u2014 47 methods. The bar is 30 methods; this is 17 over it, 1.57\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"acb3121bcc0d4b54901384ca102824bbadc08b97387136f036b79f1266952315"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: cssParser.parseCSS: FunctionTooLong \u2014 parseCSS runs 156 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 56 over it, 1.56\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/cssParser.ts"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"97af1859df5d95d95f0b4ee947c0915a331f6f49786889c5928831a6ed6d1af6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DashboardModel: TooManyMethods \u2014 46 methods. The bar is 30 methods; this is 16 over it, 1.53\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/dashboardModel.ts"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"241d224089cf3dbf47284441db2fff16a2281568f0255eea34b564ae1d16809b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ElementHandle: ClassTooLong \u2014 600 significant lines (blank, comment-only and punctuation-only lines excluded), 71 methods. The bar is 400 significant lines; this is 200 over it, 1.50\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dom.ts"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"d71c6321240ea10f674368ebd702e54cd010e18b37ab7f4e9611eb3dcf0d38f1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BrowserHandler: TooManyMethods \u2014 45 methods. The bar is 30 methods; this is 15 over it, 1.50\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/BrowserHandler.js"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"a872ba313e1f63d444a756ecb616e8449f5adbcd47cbff207e83b53b9e81bf59"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Recorder: TooManyMethods \u2014 45 methods. The bar is 30 methods; this is 15 over it, 1.50\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/recorder.ts"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e1fb87e600f73a4304f67255804623658df3bbc2598547af13d5ee986aa1aa6"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: selectorParser.parseAttributeSelector: FunctionTooLong \u2014 parseAttributeSelector runs 150 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 50 over it, 1.50\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/selectorParser.ts"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"38eab5e291a0759e522963a3f9d56552b93ae96c4f2bac868dc19e13247fcbc1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BrowserContextDispatcher: TooManyMethods \u2014 44 methods. The bar is 30 methods; this is 14 over it, 1.47\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf832b6133d39f9f4a9d4e7176673bef2f239106aa701ba0bb521f45311dce8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/dom.ts: FileTooLong \u2014 726 significant lines (blank, comment-only and punctuation-only lines excluded), about 83% of them inside a single declaration: ElementHandle (121-970). The bar is 500 significant lines; this is 226 over it, 1.45\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dom.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fea8d8773dbd28e447f3f45b63a1304605e5e8bb0293c18e80f902048d4a307d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: juggler/NetworkObserver.js: FileTooLong \u2014 724 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units). The bar is 500 significant lines; this is 224 over it, 1.45\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/NetworkObserver.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dda42cb8a91f288c44de68f209eab539e82c94fba7ff92f3878b30d2cb290ec0"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Page: ClassTooLong \u2014 560 significant lines (blank, comment-only and punctuation-only lines excluded), 124 methods. The bar is 400 significant lines; this is 160 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/page.ts"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"34ceffda41376b4c5a157b64e48ae96b3f7891b1837c4a77837e179e5e55025d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Page: ClassTooLong \u2014 560 significant lines (blank, comment-only and punctuation-only lines excluded), 75 methods. The bar is 400 significant lines; this is 160 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/page.ts"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"70168ee3bf53b07e71f7d6a1144ce9b987f3349fb4a55b12880cda9fd72af280"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ElementHandleDispatcher: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/dispatchers/elementHandlerDispatcher.ts"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"32003df345b146560dc441aa61c99e75d12de19dc53c2e4134ed31f5e3fafe93"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: generateDotnetApi.renderMethod: FunctionTooLong \u2014 renderMethod runs 140 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 40 over it, 1.40\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"97f26c45f2eb7ff0fc345806b53c18a945880c861d481b414aafc5939c43b381"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: isomorphic/cssTokenizer.ts: FileTooLong \u2014 697 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 197 over it, 1.39\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/cssTokenizer.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c25e638304f74965ece4e100865d025769a304686a94ed67fba552fb5fb3a98"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: FrameSession: ClassTooLong \u2014 554 significant lines (blank, comment-only and punctuation-only lines excluded), 53 methods. The bar is 400 significant lines; this is 154 over it, 1.39\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"4904cf2397606ab4b4ff21b88ac42b1371bbb5f3d5abd2c754bd9a0ce6288436"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: generate_channels.generateChannels: FunctionTooLong \u2014 generateChannels runs 138 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 38 over it, 1.38\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_channels.js"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"847684275e1eb788e4f6147dccefb08caa24a80e3e0760391910ce052904e2b3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ElementHandle: TooManyMethods \u2014 41 methods. The bar is 30 methods; this is 11 over it, 1.37\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/elementHandle.ts"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc36f2c631d7278e6d480efc2835da021343104c2b991e84fbaeb905bd802ba0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Tab: TooManyMethods \u2014 41 methods. The bar is 30 methods; this is 11 over it, 1.37\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/backend/tab.ts"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d87d685e07696b018d865e3dd25fd33191f2593cbee4238218b723c3bf76f7b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: treeView.TreeView: FunctionTooLong \u2014 TreeView runs 135 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 35 over it, 1.35\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/treeView.tsx"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"dce6278ac31d2641c281e97d47bb06929ee574edd9e70762593c707e577a9442"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: recorder/tracing.ts: FileTooLong \u2014 674 significant lines (blank, comment-only and punctuation-only lines excluded), about 78% of them inside a single declaration: Tracing (88-807). The bar is 500 significant lines; this is 174 over it, 1.35\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/recorder/tracing.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2241acd1ccefa4e004a87e130849ca748116241545e80900c059c214b0154e7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: client/page.ts: FileTooLong \u2014 660 significant lines (blank, comment-only and punctuation-only lines excluded), about 85% of them inside a single declaration: Page (89-935). The bar is 500 significant lines; this is 160 over it, 1.32\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/page.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b918155a739861cd3d5001288d2020aeda334d2f19cbd37808ef0723967f572"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: program.decorateMCPCommand: FunctionTooLong \u2014 decorateMCPCommand runs 132 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/mcp/program.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb3a8819633ab098f83e7dd067ad2f7b8f15ef298134cadee5c4e34fb6f403ad"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Tracing: ClassTooLong \u2014 523 significant lines (blank, comment-only and punctuation-only lines excluded), 53 methods. The bar is 400 significant lines; this is 123 over it, 1.31\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/recorder/tracing.ts"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"02cc7de58dbd2cde79428b44385310232014219b2ec82558422de488e74ae0fd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/fetch.ts: FileTooLong \u2014 638 significant lines (blank, comment-only and punctuation-only lines excluded), about 64% of them inside a single declaration: APIRequestContext (102-675). The bar is 500 significant lines; this is 138 over it, 1.28\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/fetch.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"691cbae3b1831241d9c043dc94d3ccdd6cbbc332d01b2e844fb328c9f4abfb1e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DashboardConnection: TooManyMethods \u2014 38 methods. The bar is 30 methods; this is 8 over it, 1.27\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/dashboard/dashboardController.ts"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"208e712dc88a95244f32ea1e32453af3be03a5ac4435f5f0e227d90731b507d3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: chromium/crNetworkManager.ts: FileTooLong \u2014 628 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 128 over it, 1.26\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crNetworkManager.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac2879b0bf813caee58ff5375e6f111ebb41a2c7fa999940779399714a565a6e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/browserContext.ts: FileTooLong \u2014 622 significant lines (blank, comment-only and punctuation-only lines excluded), about 76% of them inside a single declaration: BrowserContext (90-768). The bar is 500 significant lines; this is 122 over it, 1.24\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/browserContext.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cc128acad39a42ed409a4f31588a6a9e1720a76f15abb1be0246519d9bfaf36"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: client/network.ts: FileTooLong \u2014 621 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 121 over it, 1.24\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/network.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f68d9d11d55b2311eac560378ec57419220fdef0484a36b96cd1bb87670fd6f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Context: TooManyMethods \u2014 37 methods. The bar is 30 methods; this is 7 over it, 1.23\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/backend/context.ts"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"7497818dd147383f8e4220a45fd6357d6f03f0f7d778f94d295f2e376a871f6f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: BidiPage: ClassTooLong \u2014 492 significant lines (blank, comment-only and punctuation-only lines excluded), 61 methods. The bar is 400 significant lines; this is 92 over it, 1.23\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiPage.ts"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"1715a9b3a1751eff52255a3bfbf273ef9fbadf75bf0952eebe387f91521de406"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: isomorphic/locatorGenerators.ts: FileTooLong \u2014 610 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 110 over it, 1.22\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"48cca30414ec78e81a33f24262a35d8093c48830f1cb20c873da37c89906c531"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: HarTracer: ClassTooLong \u2014 485 significant lines (blank, comment-only and punctuation-only lines excluded), 28 methods. The bar is 400 significant lines; this is 85 over it, 1.21\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/har/harTracer.ts"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb7f931e5b577aaf26babddb39f58d5fd6279a4b14744f44767c243dde3a0306"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: har/harTracer.ts: FileTooLong \u2014 604 significant lines (blank, comment-only and punctuation-only lines excluded), about 80% of them inside a single declaration: HarTracer (66-731). The bar is 500 significant lines; this is 104 over it, 1.21\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/har/harTracer.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9fbfe8fda683f05671f0cbb62441095fa02a7381412a1d5dce456ae32031cd0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Highlight: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/highlight.ts"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f3d320cc0de9ece6199d4751da935402a2222017db225352c7e6a359b962ba4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FrameManager: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fc74ce13826db2492d02fea253c68624e69e9f377f9e62dbb0cf822792f5fab"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: InjectedScript.expectSingleElement: MethodTooLong \u2014 expectSingleElement runs 120 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 20 over it, 1.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1518}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eef592a4a45b741e893460d66fe623f17bde314d446b8ec3be6985eee9d8136"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: webAuthn.inject: FunctionTooLong \u2014 inject runs 119 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/webAuthn.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"61eccbac89f087185d1f8fade0f3b71e6663a1cd86a2faef97c12c62942bdb74"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: BrowserContext: ClassTooLong \u2014 472 significant lines (blank, comment-only and punctuation-only lines excluded), 74 methods. The bar is 400 significant lines; this is 72 over it, 1.18\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/browserContext.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c3f77e82cfc871853369915e506c3c6d091ea93d23d20f09ee032f72b3d086a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PageAgent: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/content/PageAgent.js"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"291150379c13b7b09bc405e41f95e7477fc3300fedba1007b29db165b38c7ed6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/clock.ts: FileTooLong \u2014 577 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 77 over it, 1.15\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/clock.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d5f8bdc3a4b6a7ad8f434eb93aa669104319d24185e92c7e4aab1e750205432"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: connect.ConnectApp: FunctionTooLong \u2014 ConnectApp runs 115 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/extension/src/ui/connect.tsx"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7e8622f3c3dcfed2ea5575b591c90ed67c8d2f39b6c7c74466f8394e9712126"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/network.ts: FileTooLong \u2014 564 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 64 over it, 1.13\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/network.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c5084c5b10ca58f41a0eb56eb0621caaa5a8ecdc7777fed7f6ee4c88203fc1c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: ariaSnapshot.parseAriaSnapshot: FunctionTooLong \u2014 parseAriaSnapshot runs 112 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/ariaSnapshot.ts"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"7194fff243805e6e1f2d8f85fcfaac95f4b609862c2cf01dd4428778e285dafe"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: doclint/documentation.js: FileTooLong \u2014 553 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units). The bar is 500 significant lines; this is 53 over it, 1.11\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/documentation.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55f567cde7302423b8b3cfb107cb82a8c7e109e1dfb391c5c5f879cbd68cb5e2"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: sessionSidebar.SessionSidebar: FunctionTooLong \u2014 SessionSidebar runs 107 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/sessionSidebar.tsx"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"31ab1a74183353997596d86cd6a3e61ad842839dbc56abc0ddbac3a7a7d655ea"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Recorder: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/recorder/recorder.ts"},"region":{"startLine":1274}}}],"partialFingerprints":{"codehealthFindingId/v1":"5600ba879261421de4dae7b9a5a6078a2581740edfc87f22b523df373c351af6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Response: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/network.ts"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"1063c55c42b8232e2dcdb2e0871e0a50f9e90ee4afa3a9736bffb5a8609b6fd9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: bidi/bidiPage.ts: FileTooLong \u2014 533 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: BidiPage (45-740). The bar is 500 significant lines; this is 33 over it, 1.07\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiPage.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d2b2cfeed6bb3d0cefee82fa35872324f2535069d2ffce8dcf6759b27eb5eec"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: InjectedScript.constructor: MethodTooLong \u2014 constructor runs 106 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 6 over it, 1.06\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"42fcd0cd9fcb64bcd395bf5aa2ea90592b18183d5a51886bdfba0394032ee9ab"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: doclint/generateDotnetApi.js: FileTooLong \u2014 527 significant lines (blank, comment-only and punctuation-only lines excluded; the length bar is tripled for a single-responsibility module of 4 or fewer top-level units). The bar is 500 significant lines; this is 27 over it, 1.05\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5af89472125f040e301773deee0b4a04e141c18457be0480e32a91668eae15f"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: utilityScriptSerializers.innerSerialize: FunctionTooLong \u2014 innerSerialize runs 104 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/utilityScriptSerializers.ts"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"af0303a47ba945fedc3c908040074820bc6e543af740364ecd0c93383eebb3a7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dashboard/dashboardController.ts: FileTooLong \u2014 518 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 18 over it, 1.04\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/dashboard/dashboardController.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"14cf4f1edfded1ef144df3bb172d8b745606a11ce9c9355770861362c29419ac"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ClockController: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/clock.ts"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"e09ea0d10ca2be10341e57da23081b5de97b70a088315cd2ab9227b7e94d8a11"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AndroidDevice: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/android.ts"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"72a63440f32e3a9dcea0bdaf7d110b0b3bb3dbe9b3d12a01e02e4d7b6c6f897c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Request: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/network.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"f745478030409686b4bc6993ee847ea67c3bf2209e370fcd2e9fca75c96ee8cf"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Electron.launch: MethodTooLong \u2014 launch runs 103 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 3 over it, 1.03\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/electron/electron.ts"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"c587cc9796185b34077525335a337472e55405e4365debd7bf69db49e9a888b4"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TraceModernizer._innerAppendEvent: MethodTooLong \u2014 _innerAppendEvent runs 102 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceModernizer.ts"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"7220dfff63114025906a6f5ea1d322c30d4f22a626db41250c65857d115d2750"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: listView.ListView: FunctionTooLong \u2014 ListView runs 102 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/listView.tsx"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4d39911d25c7f2ab664f9bda5f9c4d11b5c532e3a3ae731d8e7ca8d14abe17d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: APIRequestContext: ClassTooLong \u2014 407 significant lines (blank, comment-only and punctuation-only lines excluded), 21 methods. The bar is 400 significant lines; this is 7 over it, 1.02\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/fetch.ts"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c9ba42c62f1b88fe1f0c3e8b6e463ce43bc4293313856d80b9534f1461a9ff2"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured \u2014 .NET and JavaScript/TypeScript suite: Coverage NOT MEASURED: the .NET half could not be measured \u2014 the repository wires up no coverage collector for \u0060--collect:\u0022XPlat Code Coverage\u0022\u0060 to use; the JavaScript/TypeScript half could not be measured \u2014 the JavaScript/TypeScript suite(s) run through a browser-driven runner the coverage collector does not drive \u2014 examples/github-api/ (@playwright/test), examples/mock-battery/ (@playwright/test), examples/mock-filesystem/ (@playwright/test) \u2014 a gap in the analyzer, not something this repository is missing. This repository\u0027s production source spans both ecosystems, and no partial figure is published as if it were the whole: coverage is excluded from the score rather than counted as a near-zero. The named suite step is one the repository\u0027s maintainers can perform; once it passes, the real number is measured on the next scan. Alternatively, commit the lcov/Cobertura report your CI produces and it is read without a re-run."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"62e63e619c28f057e129f2997c965d32a457366a9ce18ca019ffb6bdfba85c99"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): seed: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/todomvc/tests/seed.spec.ts"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3d0b49c7018de06fc0a115c14844ca408ede21625cc71860837cf028b2f7bb8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should-uncomplete-completed-todo: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"examples/todomvc/tests/completing-todos/should-uncomplete-completed-todo.spec.ts"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc7f59bb98f7523636de3f99c1ea233276a8ffaeacdf1a13c6b329ddda255848"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should render: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/splitView.spec.ts"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"65ef5fcf0b0d71c3018d7ba96d97c529dc846241368e6fb7112e68f8b70b617b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should render sidebar first: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/splitView.spec.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a24989499b1b4c9efc3bab40ec94203077737b302e8e4d1b5164ab213110fa9"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should render horizontal split: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/splitView.spec.ts"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1489ec47d3d538d4b422239ec3fa8c313f1a28730abc758a0cf817229b625c1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should hide sidebar: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/splitView.spec.ts"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f540802712bc4b3e050582ddb3bca1d385efc0645d17bb9d6e016f4fa395f1b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: drag resize: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/splitView.spec.ts"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9a5df12a885881f9962fc062ce43bc1fa99ff8c579ca92d4babbadfc9dfb1d7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should test app that opens window fast: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/electron/electron-app.spec.ts"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"4275def150225819c0927d3b3f1333d547fcab69294bb18b3dc08a26c1ab6a92"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should create page for browser view: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/electron/electron-app.spec.ts"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"03da8c58be78d954b0e1a4d2f7b54030e6fe63838bb767267931424258746c91"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should detach debugger on app-initiated exit: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/electron/electron-app.spec.ts"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"e95bba8418d0d1f194614a4c052f06da7042fc3092e788f876234c0db59ce570"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should run pre-ready apis: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/electron/electron-app.spec.ts"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"4209d9e71e6808b08307ebe42de2cb1baa367223f09cd659cd1f56f7cb4a06a3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: connected tab is in green Playwright group, connect page is closed: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/extension/tab-grouping.spec.ts"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ba2149c6d9223c72ed2ba9daae08acbcd9c565923c735f2b4fd7f2bdc864f74"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: tab added to group gets auto-attached: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/extension/tab-grouping.spec.ts"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"03521dcd6a75cfaca5554463559dbd1defcdafa4365a3fa02f4c6891e3004740"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: chrome:// tab dragged into group stays until it navigates to a debuggable URL: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/extension/tab-grouping.spec.ts"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"de0300ded475ea8d3e31aa99e222ff99cb7b0027bbbb51de326012b011c28b1d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: tab removed from group gets auto-detached: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/extension/tab-grouping.spec.ts"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"acdcc9850fa1fb422d76649af49c57bacebe0223ace956a65b812f2671bab7cf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: connected tab is removed from group on disconnect: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/extension/tab-grouping.spec.ts"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"87a055222d88c7adc74d76978dace76f8b928ce0c3907055e1b70cce87f8e856"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: tab is re-added to Playwright group after reconnecting: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/extension/tab-grouping.spec.ts"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d2065d46b55fae280fe542fa55d757eebf4d72edae34e84daab1f4738016383"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: srgb to lab conversion should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/image_tools/unit.spec.ts"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fa24f14fe61566b2310dfc26d6921436b3c6ea8b029d6db80efc663565dda30"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: colorDeltaE94 should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/image_tools/unit.spec.ts"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"da70de46d0c17e8d50da6d7c88364f391ae06bd7cc93822b934bc9babfc96b60"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: fast stats and naive computation should match: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/image_tools/unit.spec.ts"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"39ef54f2d72d4d124930cf2711ac263aafa22beff5e1a62ede3a4f11d73b1005"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ssim \u002B fastStats should match \u0022weber\u0022 algorithm from ssim.js: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/image_tools/unit.spec.ts"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc51cf9e481597ab654abf6aee786d9f99081682facfdba6506839428083a0ce"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: typescript types should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/typescript-types.spec.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec5a12234a2b6c5d388129ef60f9a10d4d47c22be3aae7d9c0031ae4fab5388e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: screencast works: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/screencast.spec.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d485eb849496c9ae903dc1ad382a0068e6277abbceef4ef869fef2a563df72c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: npm: @playwright/test should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-test-package-managers.spec.ts"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b49ebaf1a204deb65320d28c2b2880b474eabd5d32f44deb22152cc769c47c7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: npm: playwright \u002B @playwright/test should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-test-package-managers.spec.ts"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfd2c7eb9795c5bbef6ebac6166822a60eb0992efb53e7c28c2cacb1b79c678b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: npm: @playwright/test \u002B playwright-core should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-test-package-managers.spec.ts"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"822f2af8ebf157b1c743a7a0f8aa954660d2f3a1e6d3835ff8b0d52d178c1b40"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: yarn: @playwright/test should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-test-package-managers.spec.ts"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b110a846ae5c880ba110abfd0e761972efb8bafb54ba64590ca1c7887369741"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: pnpm: @playwright/test should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-test-package-managers.spec.ts"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8dad681b78aec8989101e1f9775e25ab2e8359e1fd7b01fc37b5b4b1e05167d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: playwright should work with relative home path: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-should-work-with-relative-home-path.spec.ts"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"90541d0156fdf1a4a22dc25ae543ba57e6b261d4551d8b0103ad3391afbbc8b4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: playwright should work with relative home path: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-should-work-with-relative-browsers-path.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"a915345b7e31088a83a05d1fa218e6695734fecba6ae472542e991fa68772ab1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: electron should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-electron-should-work.spec.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"9735a43856999852981e85d0bcd266bc52727ddd7b801792a4b4ddf5699248a2"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: electron should work with special characters in path: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-electron-should-work.spec.ts"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"48f6796daf60afb2094c1f0aa42ba59bfb82c69b91aad34ddf4202a446afbcc4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be able to remove browsers: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-cli-install-should-work.spec.ts"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"79ebaa8a0eb2004ed12b58dba504dc3989984ab7532a1af9ec6e81d7c6228dad"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: subsequent installs works: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-cli-install-should-work.spec.ts"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"de4a085b5abb073f2d850cbe57c279759e4b50a5e84649c7893012335b3b64ab"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: install playwright-chromium should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/playwright-cli-install-should-work.spec.ts"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cd8baedc87d5f58815799ec5388bf69e9fff020c5eb2d750ba2e9a19c582d77"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: driver should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/driver-should-work.spec.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"42443ec2904dcc81d73155139a2c6d03fab4db638879cb06f7ccd1b9fec94518"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: connect to selenium: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/connect-to-selenium.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"47eba032b7d8e224963437a6801708d37f3f48a7786682a8c989441aa2512e60"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/fixture-scripts/playwright-test-types.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"3deaf72cdf900dbb44f8c453307b15005007dfcdbbb6576337a95a78f20c9b82"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: platform: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/fixture-scripts/docker.spec.js"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a2ad5f806e5284076838206f161cc9f540ed0d0c107cea7997f10b83d759bb6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: userAgent: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/installation/fixture-scripts/docker.spec.js"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"341df450e2101948b5342c8230df9a9b3811e7e1e0a35ca63808f3c7c75284db"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw without recordVideo.dir: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/video.spec.ts"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddc0f2d6ddd307212687ff4a00f5cd185b04de5312d9f7bc39bdc22159d27965"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should capture static page: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/video.spec.ts"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"da844c8abf6e02fbd77bb02f8cacea7ab34db4e34e4d39f6f6aed93316fcaeb0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should continue recording main page after popup closes: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/video.spec.ts"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cbcb47627643874dd4a240143205fc63113a552427c70a71f90f477829c2e96"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: context.unrouteAll removes all handlers: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unroute-behavior.spec.ts"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f918e41904e0c91f8c4460ddc3d153d84aa3a6842922c9336dc9983d422c83d"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): page.close should not wait for active route handlers on the owning context: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unroute-behavior.spec.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b1835f769e4acdec403d6b36b5c98a10beb90be3998aede513e844e3b64c603"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): context.close should not wait for active route handlers on the owned pages: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unroute-behavior.spec.ts"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"de87cc7166f06033e965ab0d23e251b2754bc769975fbee088afecfdd9d7acee"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): route.continue should not throw if page has been closed: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unroute-behavior.spec.ts"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"953db66d2db783d7f0ee4e71b3d647af54f9031adb65b68aa12c2c35e3fdac9f"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): route.fallback should not throw if page has been closed: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unroute-behavior.spec.ts"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"f49320e0e119684da19bc0bca0e6c311ea660c18925ba327e945c825a5469d39"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): route.fulfill should not throw if page has been closed: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unroute-behavior.spec.ts"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"06c0bcf66ac8862c36081cb744bd93f679e12dc466f17b8928935f91ea13b6d9"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should not continue requests in flight (page): Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unroute-behavior.spec.ts"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"0df1d3f0ebc1220a6e9a1e262831226dfecac6c5d0e9afe09d5d3390a55a98f7"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should not continue requests in flight (context): Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unroute-behavior.spec.ts"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"d548b178cce0867193393e4bafaa15fe69965f14e1c2ba0b651643515396d356"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not crash when browser closes mid-trace: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/tracing.spec.ts"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"27313a0540cf29b207c1ef6458ee50ed2a93f381ac1122d7b02dbffbc22679eb"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should survive browser.close with auto-created traces dir: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/tracing.spec.ts"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"34bc90b9ad2ad479253d46fa16116cf262e5b4d8f3d7fb657b7b4d6d6a0d2103"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not stall on dialogs: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/tracing.spec.ts"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"368eabc223e5126bc2a8f49c54aa5e167814a9dd9d44ea867eec3e820c658c9b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw when stopping without start but not exporting: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/tracing.spec.ts"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4836ab9bec67a5fd910814973615cd2038068a3d86a3ae561690b60c0d8ca34"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should export trace concurrently to second navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/tracing.spec.ts"},"region":{"startLine":648}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5d740843a616088f46a75af88f184377f7a86000b8a41b0fbc972ccf740b4cf"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should not hang for clicks that open dialogs: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/tracing.spec.ts"},"region":{"startLine":664}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfe227fbea7dedab55ff3a8847ac872145a3f1059b92aa782e9a814af476ebb0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should properly synchronize local and remote time: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/trace-viewer.spec.ts"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce73ecafc18f76dd814bf20bcca667d4cfdb0a426be50d51b89dfa22836f99bf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should have network request overrides 2: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/trace-viewer.spec.ts"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c67d25c48d283d4bd85c806eb0a3b3274e2581d4bea5accb6d12212236b6aa4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should pick locator in iframe: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/trace-viewer.spec.ts"},"region":{"startLine":1676}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5700f43f929f5f82dd97aadefad5ee6dc5f0c54c44b77145a5d4a50f5a115d8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should show only one pointer with multilevel iframes: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/trace-viewer.spec.ts"},"region":{"startLine":2058}}}],"partialFingerprints":{"codehealthFindingId/v1":"9449a22661246a98eb648c4c9d3b062ace5fa55ebf1f5dfa84bde42a1d9678f4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should preserve custom doctype: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/trace-viewer.spec.ts"},"region":{"startLine":2670}}}],"partialFingerprints":{"codehealthFindingId/v1":"2855a7d7ca254be2f5620f6224148280403c576a13b95069c5900b4fef54b928"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should replace meta charset attr that specifies charset: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/trace-viewer.spec.ts"},"region":{"startLine":2678}}}],"partialFingerprints":{"codehealthFindingId/v1":"524284aceb46896b5e4bde63425b7950d831415d84ad76506fc079b4ca25bd6e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should replace meta content attr that specifies charset: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/trace-viewer.spec.ts"},"region":{"startLine":2687}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a3229267b25d75426cf97d91afa242073ad0988bd3359f31357127506ac74ca"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not wait for a navigation caused by a tap: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/tap.spec.ts"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2a64e02014d26cf61f879213ef0e83cba2c8a09f0eccc719a5863532e0d1dcc"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should send all of the correct events: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/tap.spec.ts"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"fee639cf3360f9bde82b0df71e5d6dfdf99152f4dbbcf3278c834f020e29c54b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo check: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"236026eed32eff08f3b9dc950b6e76734a84da9999b62c4d6468c7654760ae97"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo click: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"d34b37a41589d5d831e7f5eefec5a2369f460c50f26cb145ce3131b46a7f999d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo dblclick: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d271159f9694b1002567d31f04927041b6a9888b7d0c3dd5edf7c0022d8bc0c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo dispatchEvent: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b46740c8609b4e140d2895ac196c22029dd052a385efc184450f5f542639f00"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo fill: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b306cac31d162888916fe24700a6cffc111644d88fa9a24457ce359e493047b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo focus: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb66353a2cbc42cc6e5daf7c1243fac81108142796a8cd5f98ce4cbd604a6e0f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo goto: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba2ea24b61a0ce7c018c7095fb3c06cfd75dfc42d5706aa8cdad2e3a8957c11e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo hover: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"c896b47853dec6e012f483b927e4dd6418f4864bf4d0ec9c32bc6200f1893aa5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo press: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"90b7689af61004507b34369cb29273f5663a64ae8cfcb33f5cded8462a030a17"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo reload: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ebf716460ac1c57c8dd3e8ea20293f86d8edb67921fc002c6d2d499d099dcf7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo selectOption: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cf692e2d6dc943d75a976d241ab3bdb321571b54af4c7be39dab20b9c7c4bb4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo setInputFiles: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c112e8c25d39b12018bfc770413814fc2edc709e765c14ea3ab815d12c16005"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo type: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bdd1bd46fb85f40fc2742fdeea41fb9fff588ee80b3f4156ce4ee61dd2c1ca7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Page SlowMo uncheck: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"b142954efff03617baf421fc324b34993f5223007b96296b819669c3cbd288c4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo check: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"51302f904f908e497bb05e1e74d9945e73ebb8e4f3e988d325a6a99eed569ffa"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo click: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"60c660290c56f726f354c8ce94d79da092acf475beab9a0b6a745a99ffaffd1b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo dblclick: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c62786e99ba47fb7792c247d7ae20fbe83e3f1d0b1fbc087ea9023f643720be"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo dispatchEvent: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ab6570f2eef1199c175819b8937e825d2ce64cc1990a08c872bb2e2c40904a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo fill: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eb021e7e51afdaedfa347bfda288e67369db5cbcd5e0b40d4246c960a201143"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo focus: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb66e5a928b62f8bf940575540a2b1fdbfb214de9000c29eada8324052257d21"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo goto: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c7d44a952a5ea5f99336d5712b96d17078072b1c2816c8800b4b5e240c7c73"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo hover: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f7c039a0acec781b89178ba299a34ca0e2f243c6252241eb245ee1051e8d291"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo press: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e7d77f0f7f00dec0427f47d59e4f4888a7a28277ae6acd28877f6f14b2ef9bf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo selectOption: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"22f39cdf10627970b5feb2b19588f1c26e8696a5772cedfe0131453bb366aab4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo setInputFiles: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"39cda2641bb377bfb1236c038101877f53a2e0116402fb5133d05459afe42998"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo type: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7417150e7a5c4d1839c88add3a3622cf3f1560789c6631051fca990b45f5ff8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Frame SlowMo uncheck: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"4df2124dd558e1a487610357946f3d06ea031ed6744b97867cd4b7f405d17e1d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo check: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"299382841cd097098982b2fda27c404846200d20957196568b05fa7bf79c7071"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo click: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ed44c3e7fa7abb9d0252b906e9cd5c259a146d5283323721cbf26a61e478137"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo dblclick: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"8269ff40f2a9f26da1f84c93841f577fa3000ee6a95d03b407f3fab52de9ae59"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo dispatchEvent: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"b86e7380b1b96d4d38df7e6abec9793369ca14243018793f281c311c01834d6d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo fill: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b05cf2b43d772bcc039530f2d059fba4db01185016b134a72443a6d3e4a64fa"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo focus: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"7354db11dcb7b5cd22bab7dc7f0c7a4bc033c633379d62e333b5b65a1eff0d72"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo hover: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"53a0a1dcd762a4c57ba096615d5ad0d90c69c3cbaedf980e0403707f1d661dc3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo press: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f388be0ce2d420e199e84684f4586f7d916f29584731f310cf4a741ad6059e8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo selectOption: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"4854891186f20ae18bde364e5ca88a0006f87eb1592a448992eec2e9e22517a5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo setInputFiles: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"41f7ea696847ea3ff3ae8c6b622fe06aa7238f6452500c87fa86196b43c7c1fd"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo type: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee8bb6d75972d8535e1621cd33500b80cf0cf3b803c37850d5eb3e8fc1f7bfe6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ElementHandle SlowMo uncheck: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/slowmo.spec.ts"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0477d751ab4241bffa35b690f07bb13cdc6cc3a5613826e930fd4687fcdb5b2"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not use icon fonts aria name: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/selector-generator.spec.ts"},"region":{"startLine":736}}}],"partialFingerprints":{"codehealthFindingId/v1":"baf939a0e85193973ec30de7d5df91e5985f2388816f5538321836777e938193"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): start allows restart with different options after stop: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/screencast.spec.ts"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"6be8d42257daefe5ccd5a3bb6bee55a262361c524f58bc141cfa364cdd9103b4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: stop should not fail when no recording is in progress: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/screencast.spec.ts"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1f73ac000f15e7b7d81e87431804e5e00261cbfc340718f034f03950da97ca8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: start dispose stops recording: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/screencast.spec.ts"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"b44f8dbb3a3102a940e2e895765ad12d504e83dfa8ac4ee7dd1029d349db62bd"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should pattern match: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/route-web-socket.spec.ts"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"96177a8ce5cc745f4fef24db1a420de25faa837edd7f83408ae17f44937890f7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with server: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/route-web-socket.spec.ts"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"24bdd504d4872c30b3c55d71541c7899278c3fb2a687826539a055a32c93d6ef"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work without server: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/route-web-socket.spec.ts"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"88fbf33cf9cf2b760ef8db1738ccfc1eb9ee09d5010f3c737884519eb5fa9766"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should emit close upon frame navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/route-web-socket.spec.ts"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"402fb2f5ab0fc74b4054ff1b85deb11434f96f2a7d8b1baa325c0d12f2cfba99"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should emit close upon frame detach: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/route-web-socket.spec.ts"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dc1e1cb88b43f8aee47dbf304f16f76de9530d1666f35c349f811b09917365a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should route on context: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/route-web-socket.spec.ts"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa0de0bd4cac05521aa7f2b9ae887ea324ad357edac9c968c371985f3a68faa0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw after page closure: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/route-web-socket.spec.ts"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a4126f8b6d287e22079a7983d9abb562ffdf616c23d44d944a901021ab5ec51"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should not throw with empty handler: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/route-web-socket.spec.ts"},"region":{"startLine":577}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3f47380b337812de4147d3d91befee6f9f95373ba7410203bd06538abefbd3e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with baseURL: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/route-web-socket.spec.ts"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"d815e6f305fef17679cab7f12b7ba9aaaf7d4c80331bab1b2cb4ea03b2ddb1e5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with baseURL regardless of scheme casing: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/route-web-socket.spec.ts"},"region":{"startLine":649}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d6e8cab42429155a3ddc3cfc3f71f6306e17ec9f8c3da50d1d40c98387b983f"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): wpt accname #: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"0309cc5ea13a062994d066c9d9f8ba4aa079c1d59d8a45aab1c32de576555251"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: wpt accname non-manual: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"76df0e54851dd1ceda2227c8e617be5d1b593f19b0f5cccda4ab95765e0015cf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: axe-core implicit-role: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8adfab92f8e6f0fbb1e8ac02e4e2c1409c875efd4230791e99bef63a1f6747d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: axe-core accessible-text: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8b301dac3bf3242735076141c45642790630a4cd0e46a9068889a4a605d23de"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: accessible name with slots: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"736f04fe1f481a52d092d2b538568655d87c07eb654497ca2ee5cd75ec3c9710"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: accessible name nested treeitem: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd98a8420e3c077b684ee27b8029c451870f3e00c228d6880a325dcdd432b5ae"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: svg title: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"d405d1c23a4275b8ff70ae80e14c4adfd916260b6e1b6523e7ba1c7c1ca2adc0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: native controls: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e8256776dede6fd275f200388425883ee6e325f13bb7e4a87e0a6e5da2e5939"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: input type=search maps to searchbox unless list points at a datalist: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e9bd46a40e83544caa533e0344f4c3f3bedcb07cd30411347c02468d25adacf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: meter and progress get their name from an associated label: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"a588954c1cf61bf637b435cf345ba0455fd60a1314640f1b7e7d2e99aac08311"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: native controls labelled-by: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"da6521d42aa7e561a34dee691021d95dc7dbf7b07fb11ed1e93dbfe3a431da4e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should remove soft hyphens and zero-width spaces: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"f88966eb8f3d69cfb3cd18d77891acfdc4ea167a339ca2853f575c05e0fc02e3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: label/labelled-by aria-hidden with descendants: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"c278b3e9bffbada6039b18d8721224a58479ad6fde0f254270acd7f12acf791e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: own aria-label concatenated with aria-labelledby: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d4428d4fc3b80a206009e5d1c9765fe9f4f2e5c7d928a3015d8cfa117857059"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: control embedded in a label: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1f566026e8c18a2d1a9868310fc6a774f45842ee54d787e5ca0246910815b70"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: control embedded in a target element: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"1516c0e34815966625d7f3937f23f8f56d103bca2eaed3f0a592ea91de62cb5e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: searchbox embedded control should contribute its value: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"46eb563585af7d1cc0290e7dff21b50611e7ab4df6a2d3c9e4a2ef440e164a63"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: svg role=presentation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"00bd2777fc0bc07ce1bd75a0391f60fe93ea1d7d855ffc24638bfe2269a91d28"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with form and tricky input names: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"4218ee7fb32576b57ee1a6b8897fc2e646c880fb1d16dcab6be6e646e475e435"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should ignore stylesheet from hidden aria-labelledby subtree: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"59f9c5a664599619b08a8dc6afb1d0db74f1b46c4546b5f978526560493a45dc"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not include hidden pseudo into accessible name: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d15fd883e1775ddb75c48421e9af48ba74e613d430b61c35262e46f08fb3e96"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should ignore invalid aria-labelledby: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":591}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d805afbfe8020d458e5926ca96fed8a3aa45a72260177e8ebd93180922fe338"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should support search element: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/role-utils.spec.ts"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"343df91d90d9e0ae22d58a0737661661eb9964a7122c14e1bc368590c70b5806"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: does launch without a port: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/proxy.spec.ts"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"e35af3bbbe772da658864398f0ec360391d0a258ae3f226d08a59b3627baae86"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: socks proxy patter matcher: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/proxy-pattern.spec.ts"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc75c6d2e6a965e3c393f858c79490bab4a4b4fc4f5ffe73c17a142c0b328239"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throttle rAF in the opener page: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/popup.spec.ts"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"06d7862ce530a39b687185f77edd2e3362852a31b1c10ca5d8efa23b04a8f39a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw when click closes popup: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/popup.spec.ts"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f5b3f1d45d001a5e8bbb5cc2e37582cb79834c7100ddcb7b71012fc2aaf9dbb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: can request screen-wake-lock: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/permissions.spec.ts"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d692e6642af7780aa9f1fe61f62985b67a5d54b6b8c64d0d7c73b07eaf0be9d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be able to close context when page crashes: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/page-event-crash.spec.ts"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"1015fb39ee98e90801bac4e3fed1cb70f2fce454d1350236ada94cb66992db4f"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should close page with active dialog: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/page-close.spec.ts"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f8e65b71c8bcca9ce58e0aa346e8c5bc088e82fd67bf6deffd2f2d4330ed67a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be callable twice: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/page-close.spec.ts"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"54f6eba8a817ad2c3abd8ee76b1d5ed95707d79f3f364524dd9a0e7f65480030"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: page.close should work with window.close: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/page-close.spec.ts"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"81583a3442fbad0e5d1729269369b2dd210e445cd31186eec4902dc00c1f5920"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should not throw UnhandledPromiseRejection when page closes: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/page-close.spec.ts"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d8bc095842ced19f14cd67874b68b98afab91935759f707b778717445343bcf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw when continuing while page is closing: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/page-close.spec.ts"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"254a1e92552f00aebbd615dbda8928f32fb36ba34050314ac0c3e6253c6cf988"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: does not fake methods: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/page-clock.spec.ts"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a168417d73fcf6d4f856f7cdc55df71003b50ef4e7598966b4046d8a5bce073"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: correctly increments Date.now()/performance.now() during blocking execution: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/page-clock.spec.ts"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"997adb3d9cc9df853bcf28356e16f24312793e919179bcca229c819e39719583"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should unpause clock: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/multiclient.spec.ts"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"70a36d78c98ce6a89ebc774e7a782753e0e80830ad2674a81c214791a50142ee"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer getByRole: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"1acaf1f69903b4194c929dcbe0c3d2ca7b78a2f4a3e4966cdfabc6461d57b906"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: refuses to translate internal:role with conflicting name/description exactness: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"0afeb6c4267bc7afef1a86a49d081c3e168dfb1c010d744e29fb20bd526751dc"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer internal:role with regex and string name/description: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"20882ae0412b0ea0b360cf6bf4f8f60d35f733fd5b0883fc06c77241d8d83f66"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer ignore-case locators: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"97101e10b2625965fda6823026ba9ce49f19bf119ebc9d70a575ab004f2f09d5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer ordered locators: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ead37c7dc3dbe3ae494821e92d23ca9c2dc42582cadd4c1585c81d23f7ef73c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer hasNotText: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4c01f51c6a4b306d6402143a64d4c195a1036bafa4b7040f41cf95180c2f1c9"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer visible: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"f756561966486512643f0b9c8e3172f46fae2d8e1c500bcc312e1cb3fad64d87"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer has: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"709b3bb8466842f42472e0b0d6ee142236e1668849fd78bf3a83023a0e064fb7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer hasNot: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e75c6b7eb9947f4b9e3a685d6426ef225bf6d6402cc2b60f85b75c0db3eecac"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer has \u002B hasText: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1ff6f00584dd01a30fe8e8751c3479668517be9bf045acc69f06eef78a700e1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer frameLocator: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"228bb02faa36683c0bcee5481729a9952e125fc46aa317e83183394f7ce18ffe"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer frameLocator without a selector: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"d186e6f4b950deca20c9088d1fb84aebc3408490a27cb22ce6c10f69c9dabfe8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: generate multiple locators: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"6257d2e3eb942b5c8ac622681b710354a8a118015378a71f7a5b3b0d31883903"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer internal:has-text locators: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":576}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf4e35fb1364ed94b743a4efbb4b96816e7827a7e0da1f3749e730fe08bf49d0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: asLocator internal:and: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1b9b5413d128299c6bf172c125c2c3a4139c1f3e404ddf8230d9b4e5f94210d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: asLocator internal:or: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":600}}}],"partialFingerprints":{"codehealthFindingId/v1":"179241fca1e188fb94294dc1fdcee9b2e21d495b7910019ce14f50a24aa0e105"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: asLocator internal:chain: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef941567d4a5e1be1d23ad51e70c8142661e32d0683545c4023c6eee50f85539"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: parseLocator and, or, chain: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":614}}}],"partialFingerprints":{"codehealthFindingId/v1":"27c7a8baf3e6c733b6c4f31747d7a898fb288d3b91900364c90e367fe8f737b3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: parseLocator nested and, or, locator: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":622}}}],"partialFingerprints":{"codehealthFindingId/v1":"e908f9fefab19041293e65ba05a155d74b02f473989325adf98bb66888dfc138"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: asLocator xpath: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"c414b4b11b3d84a04954e48c021ed0dfbc44b8a0c01ea32e5a4450fa3274a1b3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: parseLocator quotes: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab8317782c7806beca195c5ef25b3c8529a7895016ed4f35e8dfc505850dc2b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: parseLocator css: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f4fd61149cda548f7b1e894d44d00758b0ba301a1cbd37c6d536701ecad7eae"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: parseLocator options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":688}}}],"partialFingerprints":{"codehealthFindingId/v1":"d85dd8e3faeedf335e49ff234d6342e7ceb418ae79d2bfee43b0348d9b1521ee"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: parseLocator role options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d2f8aa8d109f9fe22f64f0d01dc844af9561cbdb079e9276c5bd6a041e360cc"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: parseLocator round-trips selectors: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":698}}}],"partialFingerprints":{"codehealthFindingId/v1":"b775088d01505f3f03f87728d26b92ceba9c1fc235855735612b55650ffde021"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reverse engineer regex flags: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"b08c56172a811a8d6f3e9940905b8cc35a6c47fe7b5c46ca9dd18a9deeb4bb2d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: parseLocator rejects malformed locators: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"744b852fc456a565a316da77566d02f93ce7042098f9e4ed048a7838884d254c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: parse locators strictly: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":795}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5f2e9bba91e008e4e6e1005a27bd74202f5c4e433d3137d1002a567c386eb40"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: parseLocator frames: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"48035e25540227b763b67b1724b20051e83d74a23c5f5fb9e46f3ce07c3b1ef8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: asLocatorDescription invalid input: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/locator-generator.spec.ts"},"region":{"startLine":872}}}],"partialFingerprints":{"codehealthFindingId/v1":"00a059f65f466039dee7abc9113efa30cfea85ddc348dde3c80c2ecf1656a0cb"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): test #${i} to request page and context: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/heap.spec.ts"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"c76689831a68612e81e8e8273aa7519353a98b9a1bb78f17029e09b3986c3fc0"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): test to request page and context: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/heap.spec.ts"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc1dc8869e84d7e7d17b4cb04f8dab9a390c6c7fab03af850056185157b0031b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not leak workers: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/heap.spec.ts"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"34a78a9b49082a7b5697234f641257b64c67d4336ea65481871687591c59c606"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should collect frames: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/heap.spec.ts"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc5300f4218107138fde4a70457c731535ebee7e7e6259ea99ef28f76473a6cf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should close browser with beforeunload page: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/headful.spec.ts"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"20312325a4f046d4cf962653a4103d8071f8d9c6b9d0a9709e05a512d1d35a69"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should close browsercontext with pending beforeunload dialog: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/headful.spec.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcacfa8260b21b5bc2c8176e3f74c8d8678e8b87c267ac481c511bd0beb47670"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not crash when creating second context: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/headful.spec.ts"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"0942e48c8b3801e2dcbb3940ca8c42e3bbe5dc9c7d2567f3c0fae842e6fa026a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should click when viewport size is larger than screen: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/headful.spec.ts"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"58ad81d330e8fc3201570f4d22d4b02f0ea0fc9719338c6fc186578565b30c87"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should click background tab: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/headful.spec.ts"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"08741596ec0046d5462d4e4882541f78512173f39b06765aeae0ac073f0fd675"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should close browser after context menu was triggered: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/headful.spec.ts"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0e427ca0e1e62a4c324558013b6803603d3cb5e3e664b4c87fb3ff712d1a6c1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not override viewport size when passed null: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/headful.spec.ts"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"91dd3bdddd82dc6eb7f3e1f2936642354b876bbce50391c7d1d5bff50d23b5a3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should load svg favicon with prefer-color-scheme: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/favicon.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c02c062cc2b9f1aae091f3eab5dcb58dd751c7b4b9e19717a031bc60209f61e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should download even if there is no \u0022attachment\u0022 value: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/download.spec.ts"},"region":{"startLine":682}}}],"partialFingerprints":{"codehealthFindingId/v1":"f952025e4e943bcf524dc9f81359699b02c8ec74c79917369b9ab56f39d62100"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should convert navigation to a resource with unsupported mime type into download: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/download.spec.ts"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4e9eefc769820804b5f9ff9a6c10e474d903911726499a06f4a06943d820037"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should support contrast option: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/defaultbrowsercontext-2.spec.ts"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"293de6c4bf045a188f71bcfdbb3f1630413836ae94b4616cc59d34097c1b6bec"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should support viewport option: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/defaultbrowsercontext-1.spec.ts"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2f38a1907a7702df11fafedc8e38ae48149c0bc92156ffde7acaba11b75475d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should record expect signal: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/debug-controller.spec.ts"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"cef55c57d6d9407141b5e641ecc97dd6ee4b28ee414f1ad93398b9214a5dc3df"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should record custom data-testid: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/debug-controller.spec.ts"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c4182b71bca8b4df5c0e02376accfeaba4e6db71201b6cf9a26c85c9257c969"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not leak actions from the previous recording session: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/debug-controller.spec.ts"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"93f4305a0fb4c152de5f174ccb42b4b2cfb7529dc25439c1c5a827a17f95f688"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should handle rejected certificate in handshake with HTTP/2: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/client-certificates.spec.ts"},"region":{"startLine":955}}}],"partialFingerprints":{"codehealthFindingId/v1":"f769d49be1b1912d1f852da49110db60287adc2a97df267ed36c5d31b177ba60"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should scope context handles: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/channels.spec.ts"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"c95b863b047b2d9320287a44088dbc05b86b48fe9348d49bb888ce555c3cdebe"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should scope CDPSession handles: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/channels.spec.ts"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"c70d2b08e72e2e4a80e2d95e52798fa5253605a07c59461b35acb4c2b304e245"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should scope browser handles: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/channels.spec.ts"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"14e55e5a3422ec7faf45cc7fd36a2662d7d6daa40e44c91ca592942f2c45dd8b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not generate dispatchers for subresources w/o listeners: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/channels.spec.ts"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"b90fda8cba7006c191fa905330e02fd4cc5ecb8d962b90bc038db1c2995001db"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should play video @smoke: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/capabilities.spec.ts"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9732a09228c6adca33b57726f789cff52dca384fbcbbbf13a8a2f7eadcbefc6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should play webm video @smoke: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/capabilities.spec.ts"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"80341ee4e679a2f791c39bdd6f69cf65e6159cc843c08842b1024f6a07260101"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not crash on page with mp4 @smoke: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/capabilities.spec.ts"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fbb2e3a99ab589b26ff134f32e3bbfa8fbbb8f09cd2ca52b489832b0d714897"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not crash on feature detection for PublicKeyCredential: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/capabilities.spec.ts"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a5f0272b4f1c0e45a02bf10591bfd97c19a78a290e72fed07f580e9f10de5ba"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should accept objects as options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsertype-launch.spec.ts"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"992799b1941269138e7d9fd2a6396db0c4c82cf67cbfaf2c27e10f6a9e34aab4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be callable twice: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsertype-launch.spec.ts"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d66e63d567279a005819b619e536328a0ec026ed9bdc3755f5cb50d4e15c92"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should ignore page.pause when headed: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsertype-connect.spec.ts"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4fea495a29fe263e3474625f06aa406aad519fb7740c3aa5aa1c376684ea40b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should reject waitForEvent before browser.onDisconnect fires: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsertype-connect.spec.ts"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"a49c7c6e7d87b5da4bee34949404a0ce2431133a09a755f3e75450d78971f8ac"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw on close after disconnect: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsertype-connect.spec.ts"},"region":{"startLine":520}}}],"partialFingerprints":{"codehealthFindingId/v1":"6569b5577f574cb4bce92bf94540ae8d6c3aaaecbef7bf5464f0cc03e90dccc3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should get the proper default viewport size: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-viewport.spec.ts"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bfd75ce04902fa33cfad445437fe6973d75735ac73206e43400caec2a14bc8a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should set the proper viewport size: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-viewport.spec.ts"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"92a0d3c6574239e2da5932a7665fcda820d7a58986a369a083240a787bd9efe5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work for navigator.userAgentData and sec-ch-ua headers: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-user-agent.spec.ts"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"70f8ad0d07010e2eb2f83f6ef20e8d9b6b99e3e13fb5ee3ae7684414da5316f7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work @smoke: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-timezone-id.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"8aef9b18d6e3c9cd99834e2b340f6f49dc302a7914fd5e2d0622aadea9ad2992"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work for multiple pages sharing same process: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-timezone-id.spec.ts"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe05475866149e813c1a700c5e6493a59e7c41b6982e91ccc36f645cdf993a50"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: blocks service worker registration: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-service-worker-policy.spec.ts"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b587df137d9852b2021b43bacaf970e7123f4ccfe74f7e8d4b3639c0ebe960"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should continue issuing events after closing the reused page: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-reuse.spec.ts"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"d020aa85b9697d3b40bebade17069ac38fb321ac6635a13deda5a9ceb8566aea"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with routeWebSocket: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-reuse.spec.ts"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"96ee604f2cd5e72de67976fbebe2efa7d9e6efec07613bda0c2c8cabbc821daa"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: does launch without a port: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-proxy.spec.ts"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"88c8602edd4652bb1dbea0fbe03ff7f8ebf748af5fcfe182a79368e805c68e75"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not hang with touch-enabled viewports: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-pages.spec.ts"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"842bf81d7b1415c3af16dc458723e3e785780fadfc754f20fddc32fa9d525ea5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work for multiple pages sharing same process: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-locale.spec.ts"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4c898d90d34f2b1ef170b583cf1929e4b5eac7a055060a2bf20ee53f66a9f3b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not fail with an empty response with content-length header (Z_BUF_ERROR): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-fetch-algorithms.spec.ts"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"34661bd9887f2995a733a11e0e7301094d718d02046f3ca786b352f99d831927"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be callable from-inside addInitScript: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-expose-function.spec.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"bec8286c4bffe263929b8282f52c34536cb2fc10719c25608a2f9eb63ab57761"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: add \u0027Partitioned;\u0027 cookie via API: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-cookies-third-party.spec.ts"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"71657e11ca1487e684541778226c6b753da2ed9e0812ac5782035b9f8e5d4806"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: same origin third party \u0027Partitioned;\u0027 cookie with different origin intermediate iframe: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-cookies-third-party.spec.ts"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"b764b8040dd7e2b7241830b9fc316ea6c8836983c80311aa6774e4011c832bf0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: top level \u0027Partitioned;\u0027 cookie and same origin iframe: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-cookies-third-party.spec.ts"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"f551692e010266eb5e88f227d23292e7c903a544797697417d8c5ad66f5f9931"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be able to hover across browser contexts in parallel: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-basic.spec.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf829b99ab4bb65482b569db78e72b4a92ee4effe098e0fe30dce37f35af04f6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should propagate default viewport to the page: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-basic.spec.ts"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd3493503ff1aa4d7af60a12ba16946d2d1f23f84d8e40d413586bc3f85bef8f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should make a copy of default viewport: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-basic.spec.ts"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bf4a9fd3a561bc1b8acaddb34b95f97c9805215b5c2512e027decfafabd8ff2"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: close() should work for empty context: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-basic.spec.ts"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"07fe4cf455f188fa76ba70de71f7961de23da3852f55492e93423a2717a4be79"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: close() should be callable twice: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-basic.spec.ts"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fc79daac33cfa15d40a374c81a5831104ed99f3549522474af6243afc6f72f0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be able to navigate after disabling javascript: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-basic.spec.ts"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0d47d96fbc3745ae437d9f15ad15981ba411ecb2052a657d4d90840769bbf15"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should emulate offline event: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-basic.spec.ts"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"5665767a4bd26cc700e4c5fc97641926b0ceecec720394793fa04468f37f9310"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should create two pages in parallel in various contexts: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-basic.spec.ts"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f689b61e11eeec65969d4febcdafe6aae9cc1fc7b3cb5e6092df90d3a2a1a68"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not construct a new URL with baseURL when a glob was used: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-base-url.spec.ts"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"93cd6f8a74c3ced1810580aa97d2f538d34f1e30c2aad863e98145dfdf220d19"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should expose functions passed as arguments: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-add-init-script.spec.ts"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"8934ab05d1223defb689592dacd2e68fba7992fb88c8d304c2abdc12167dcec4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should allow unnamed cookies: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-add-cookies.spec.ts"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"009ff24fb0872f9ef46299b1de97e3610edd6058c84702a9056f229ebb3b8e74"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should close browser with beforeunload page: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/beforeunload.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"59f39687579362ff2b80f3b660276fc4cd2812f979d9efaf89625f9ef41a9cf2"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should close browsercontext with beforeunload page: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/beforeunload.spec.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"29a8e4e236e38520d290c5f23724d0ff15a23b5529864bfa974f387e11d8649b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be able to navigate away from page with beforeunload: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/beforeunload.spec.ts"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"98d7e7b1b659e784fe2f9ce015939f5b2394d644c0c81ee3e896d6dfd80e2d24"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should close page with beforeunload listener: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/beforeunload.spec.ts"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"b70baa05c95fa362abb6107a341fce9eaface1af01798595fd63a867071ab57c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should access page after beforeunload: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/beforeunload.spec.ts"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f33b3d4b34e40c6148904d211cfa1713e57df9a1542bbcb26b461046487a757"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not stall on evaluate when dismissing beforeunload: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/beforeunload.spec.ts"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"cba30016ecd143e639cebc601fa9b460099f28f701129d8b093175fdf9353231"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should support dismissing the dialog multiple times: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/beforeunload.spec.ts"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf7d6d5b01b0867907f46edcdd3ea5bc0b264fba9f531769f05b7258a0ccee8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: does not get stalled by beforeUnload: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/beforeunload.spec.ts"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"461b39f070bef93e5991e2b49ac5a4c7ce7f37e4e9510708804c874660eafd8d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should enable and disable domains independently: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/chromium/session.spec.ts"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"da3c8b8d3bf00e4096366b12de3cd688138a4f4e8225c80b73b6fbcfff84cd6c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw with remote-debugging-port argument: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/chromium/launcher.spec.ts"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"48a1d350f02d081d819013019d9252dd335b3345d332b78cc99a4a3f35e2eea6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not hang when there is a debugger statement: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/chromium/js-coverage.spec.ts"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"df8de7e7e6d8af742c28e63d72a233411c16d02f27143783c3935d1f4a8c4cb7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should receive close when node process exits: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/chromium/connect-to-worker.spec.ts"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a0f83e3e7ca3bc33e1477374a6ca8abbc40d125b7f079e98ff90deffcb9b079"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should keep URL parameters when adding json/version: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/chromium/connect-over-cdp.spec.ts"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fb347fe44d122e99d97b49ca0ceeeb2b1b3d5b1ded990fa5234c5e9fed88218"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should append /json/version with a slash if there isnt one: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/chromium/connect-over-cdp.spec.ts"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"78552762b6d8a5a4880f809cad4db61dd5288847010116208d32b575a8ef8483"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should emit new service worker on update: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/chromium/chromium.spec.ts"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"13bbce76bf502cb5243ac01bda987f7e116f376fbb8c0f7fa9126020995a976b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should report failure (due to content-type) of main service worker request: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/chromium/chromium.spec.ts"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"00bcbdaf55e0e0ddcb6f5b0a9a0ef33307e67fb2eeff2eb80e9034d0ad02f706"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should intercept service worker update requests: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/chromium/chromium.spec.ts"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"9081bd1981505d58012f7b2ea911eee9645e254927eb587cd6486b7d3984d567"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Fourth test: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/events/remove-listeners.spec.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"10da2db938eca066b24b20a29f7c4483ccdf041fd64d836f055a674e933e84ec"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: Fifth test: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/events/remove-listeners.spec.ts"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bf041eb2e8f65ac255141f22c47e4c6773a79e42ec8d8cac8d600bf2e4fb849"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: removeAllListeners with no event type: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/events/remove-all-listeners.spec.ts"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"c659604f7ed518aba9de970845b9e236eb3de052f24f9a154c78fc1aaeec6c9a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw with ignoreErrors: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/events/remove-all-listeners-wait.spec.ts"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"b532375d0c5f098bef692a405362c4dddcf3ad3f99d5f779488551326e6b1f26"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: set max listeners test: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/events/add-listeners.spec.ts"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dc6c851cfe4ba97db1142bd50316b0b91582879ff0e666a2f81529b34dc638a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should resume when closing inspector: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/pause.spec.ts"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1f96c863e61a322d35d148f85acd0bd16ed0704ea48a8043deb08146784f946"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should pause and resume the script: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/pause.spec.ts"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"887fb1b0ebc74086db2e9cf05c5088b1895aa36947c6f73245de85b1fdd71980"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should resume from console: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/pause.spec.ts"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebc63d8e91f9dee7e7b756b753b24d1849ea03e98f7553843c5da019d4211db9"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should pause after a navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/pause.spec.ts"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9422d7ed540587524337b80b71d289005f18e050a346ef3317b726b14dbbe4f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should skip input when resuming: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/pause.spec.ts"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd177616a815faa43f4679bb6089ae39d5bafecf3a894a8a8e5f7f5e40d029b4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should highlight waitForEvent: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/pause.spec.ts"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f263c37026ee1f549914eb2d8a406cd292e0d12de59a8330e9a63e5055556e0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should pause on page close: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/pause.spec.ts"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"e415410008e2a056411f211b6f307c57a3fe42e18b0c161225fc9e6933f2ca2a"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should pause on context close: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/pause.spec.ts"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"a73f6a43514892f6ca694afa27c84e27b3a8a0fff814e016ceaa5da8f4a9ef0f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct imports and context options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-test.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca96e3aa4e62a0ef4b138387be4770e4fe1e9dff9a8c7e76a719f2cd763e04e9"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options for custom settings: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-test.spec.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"40055bd7729f1ebe0c9963f1497790536ac78ba05d9e4607658147c7dc384cde"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-test.spec.ts"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"26defa5b3f3fc253d34708e662ffe49197726848c055b1dc61559811dc9b346f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device and additional options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-test.spec.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"4472780677b48270b1506ec3205e2c9841b8a6d646e0bb982810b4c8704b5e1f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print load storageState: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-test.spec.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b2d34754ca9a29d7108e89120d7d066eb8811792e0d8c1e0c930f3054d727c0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct imports and context options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python.spec.ts"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"b024cb0e118f68349f6e1dac383bea505a46d850818f4923e3f3f2bbf6c75ecf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options for custom settings: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python.spec.ts"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"94277368625686e42e707b4449a0ef10019939f591d4886b5951eded188c1db3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python.spec.ts"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"294f40cb055f7600e1444accb5aa51b756429dd553bdf96ed57809838a8cfdbb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device and additional options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python.spec.ts"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"b426cce6a16533f3cb8f95a9c58da846b31e514b6021553ba482628042447ec0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should save the codegen output to a file if specified: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python.spec.ts"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b9411e1f2efafc42321c961e2125b70a896da4b3148d8dd1d812d9bab6aad5c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print load/save storage_state: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python.spec.ts"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"020d646d24b5b02857751e94c3fd8d35f094f8e27d0ba12e507f1f198258e345"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct imports and context options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python-async.spec.ts"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"65f39352dc473d3f708c1e4f977303db32ce68c5d63c1f80f52902c5791304c0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options for custom settings: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python-async.spec.ts"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"93ce791b7c2b1d727ed10d581d16d950ef7077bfe94e6bd498c1a97acf22311b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python-async.spec.ts"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"73cd0197be43c00f0de557d9c21a12270fa418671391ee5e91d5d325bdb138eb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device and additional options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python-async.spec.ts"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"dab072ac5dd8ecc18d73cafaa329850ecadbbaa3331d5bebac3913a6aef34c84"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should save the codegen output to a file if specified: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python-async.spec.ts"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"14cce1643007cdc020c938b300fee86a7580dd0851818c1474cf1f0c44a360f2"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print load/save storage_state: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-python-async.spec.ts"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"e43ac9868f0c9aae537f3000ec9f91d567adb577eb445074cfac2c71979f0ccd"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct imports and context options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-pytest.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d43dc65e96c4cac6b3382eca75304307af9b880094654ea6d1da0ac1a473ac2"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device and lang: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-pytest.spec.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ebd3f13cc19dad42c15e5b16ff2dd087c6e5404ed49dc9b377c567790f79ac9"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should save the codegen output to a file if specified: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-pytest.spec.ts"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"71dcfc8fff53a04fe5726dc7c1cf2cac685d1f855dd4a5989e6693b33a53ae5d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct imports and context options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-javascript.spec.ts"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"c94750d8dc0a18d52ec28661521fe9f37c49d71b276928af09626d7869083386"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options for custom settings: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-javascript.spec.ts"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"733742d49f5e8c239d92214f1af3df5259671a442a9691209b08a3d0deb095de"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with --http-credentials: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-javascript.spec.ts"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"209f68428c96d048f6d32226c855718e5887a3cea710e044eea9af7122865479"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-javascript.spec.ts"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"0172e12b5b6f39ecbe6352508123e45891e9aaba083bce42bbf0b9b912277357"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device and additional options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-javascript.spec.ts"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"27d9bde466293cceb28cedd20b7f2f6dd50f0da9b51593c2d733f5c2224a9512"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should save the codegen output to a file if specified: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-javascript.spec.ts"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"e37b7d7aba4673dcb8e8187c75ff3fbf3f9e1b2eebc7171200b9f053ba2102dd"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print load/save storageState: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-javascript.spec.ts"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c5ce3124a2a9d9fa486da360dfb1a3cac7690d231dc598d3d11c63dbf402047"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct imports and context options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-java.spec.ts"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"465292c3ec615ddad27e860d01ce902acb5b46fae077a5f2c2e7e694ff33c673"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options for custom settings: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-java.spec.ts"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e178665682ae44c3d1736d115eca7d1c544d05777b8dc04bfc5a91263e26c6a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print load/save storage_state: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-java.spec.ts"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"3deff90821d02b2e16512143d62c6654a217c2aa07cd7f0849e443358e0c8480"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct imports in junit: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-java.spec.ts"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"62998ba32ccdcf93c45ac05185ab2f759db886d7bdafb2fc5b612854dbc798f2"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print a valid basic program in junit: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-java.spec.ts"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad0cf88e1920759fc3d2767991416e8aa5788d6264a4b2fb80afe882fc5f6243"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct imports and context options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-csharp.spec.ts"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e47e260edd1963ab38143a5d50b87ffb5911e7be25a3e1738aada00910680e7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options for custom settings: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-csharp.spec.ts"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceb24f8cad8acf7c9a49241497d4848738e99516e354868c6641b9fe3dc2ab10"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-csharp.spec.ts"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d90b41b5a9a826a128887f1e77a18b459e1cc34cd958cdb6d39e9cc71fca71d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print the correct context options when using a device and additional options: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-csharp.spec.ts"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5271de5d5904d75482b8416dacc1f478c5d691b27c684e04655b5e79b70ae2f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print load/save storageState: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-csharp.spec.ts"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"89917c06f3f6a616629cc045731118d44d67a11253a0d6f9c4ec4b9db17e2065"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate aria snapshot: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-aria.spec.ts"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"35e4f3f69d965571a3c77a375bed855819e22cb5c2c1f23fd5529e7a9989bfb4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate regex in aria snapshot: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-aria.spec.ts"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"0223c4d5cfd9943d41691be514c5d752c821a6f05927b0423bb95f83a849a48d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate regex for uuid in aria snapshot: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-aria.spec.ts"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0aba5dd2d3bada5c8071ee6666a30bef94655e067db590567465316ba1c12fa"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate valid javascript with multiline snapshot assertion: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-aria.spec.ts"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"42fe6f9215f55e7025487b85df9e6e29d5fedb15a5579c38ae04eb17772f8ebb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate frame locators (1): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff2e335504f98003ec9faadd5898a8b85041f8a983ba0dd534fc63dda126d0bf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate frame locators (2): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5aea93e26d75c4a26ffb1e5fef7ab1e3022eadc5d9c0a6d6b93e5685cb132f0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate frame locators (3): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ac6d1bedefb912989a73f1e9bb8844722e15a494eee27c7cec91e624802fc6e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate frame locators (4): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d4059ac245bc36f9c6ac7f5feeaee19577ebb239714e7279a7ae583a8358ed3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate frame locators with special characters in name attribute: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c18d3170488e8c01910955ce481d4f9e762d6bcc9998d752f000c3aa25e0f29"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate frame locators with title attribute: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc6f8563be20f95676a5f6b257f531f87fa78e0e07039f78dc553d5853034887"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate frame locators with name attribute: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"3829c1e5c3b94722f9eb9b181d5ddfe3621b84892f68f61b12fe741552e81407"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate frame locators with id attribute: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ecb563b7ff40f49eeabf6418b47ea6f1708d0b4acc1dc3d6bd8a999e1053024"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate frame locators with testId: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"23440f7436261758a14a9942cdee393647b5efdae8ca9e763cae96da14a2e119"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate role locators undef frame locators: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"40ebebe1e31a166052bdf7e7f2a11938f63310fde1dfe37768ba6eaf3e2bf30b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should assert value: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":806}}}],"partialFingerprints":{"codehealthFindingId/v1":"b534e1081de8fc8bfb52b859688a5ee78c810ed6dde44d1a69f7f27d1c8e5d07"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should assert value on disabled input: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":853}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd6a644afb965196b55521eb194e310fa2bc86a3b473f7c11712935bd90e2e8a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should assert value on disabled select: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":878}}}],"partialFingerprints":{"codehealthFindingId/v1":"25e608a5ed8a8a60668f3303235a4e422909cac1bb744f7a7c179c0aa0524c2c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should assert visibility: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":899}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8c6bbc0debdcc72fffc8bf5b5a66414f64e1fd31756870cadeb4de059aec7af"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should prepend the frame selector to disambiguate: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":1125}}}],"partialFingerprints":{"codehealthFindingId/v1":"bebcfd79265c10bb1562b655fc33b850b0301b8962fef5d3efde6b432c13bcd0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not use frameLocator() when it saves a single frameLocator(selector): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-3.spec.ts"},"region":{"startLine":1147}}}],"partialFingerprints":{"codehealthFindingId/v1":"43cccbc9feb98b0fa7a477da77938056f13488f20c3ccd21beb20591b2c7f42b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should download files: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-2.spec.ts"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2bf18f9c84d55b5911ff322e6c43244307387027b9ad750eddb03bba4eab80c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should handle dialogs: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-2.spec.ts"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"172829f33f73eb7ddc8d6991da8d0f68d2b6f14dae1de41cd89a947ad3609e04"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should handle history.postData: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-2.spec.ts"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc068c31d55a2c7c06ac620dddf7f2d616aaadb1d33dc1f61b209b13d8598e70"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: click should emit events in order: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-2.spec.ts"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"f154560f28749474d284cb4e9c8610bf1a98b3a5f9bb7fddde08b44a0d067454"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should check input with chaining id: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-2.spec.ts"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9f512326d79ac10e216373b1e9a1708604d9c623529e7bf0ccb46d39759afb1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should record navigations after identical pushState: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-2.spec.ts"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f293e756602df2c23641a62dcf2cfdc920d039eacc90fe5cb21ad00abe2dff8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should --test-id-attribute: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-2.spec.ts"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a7a69c87d8ce14c0a9b867895c1a3fb4e1eb31489f2a61f2684a9cf510ae676"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should generate getByTestId for any of the configured testIdAttributes: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-2.spec.ts"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ec450191a2beb7581b224b7dd87e3a268286d500c9a5501bd9c6f58c68754bf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should record omnibox navigations after performAction: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-1.spec.ts"},"region":{"startLine":1102}}}],"partialFingerprints":{"codehealthFindingId/v1":"26ca19b20987da68fef616faa6d324a6ee89ce3642b5f204dac6ade98bfaa59c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should record omnibox navigations after recordAction: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/inspector/cli-codegen-1.spec.ts"},"region":{"startLine":1115}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9b16e17dff55cfe4ade6d701a21c22ce0d66e510174ace5db5e7de0859e6227"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ignores null argument: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unit/clock.spec.ts"},"region":{"startLine":783}}}],"partialFingerprints":{"codehealthFindingId/v1":"44d7ffd8c0467db2bfe7dfa826139289bd57190611d7a7ef6d05ff57bbc43670"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ignores null argument: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unit/clock.spec.ts"},"region":{"startLine":892}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c34f2608feb4282d97b33d76c99f8eb4ca800b37291bdbbc8f3142175eb3e88"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ignores null argument: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/unit/clock.spec.ts"},"region":{"startLine":1392}}}],"partialFingerprints":{"codehealthFindingId/v1":"9caa0dbc14de3a5c9876f2c26c0fcaba9f16dc2297326e92e6bf3750aa40a135"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: reports missing ffmpeg, not missing browser, when recordVideo is enabled: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/video.spec.ts"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f9973bfceff3f2eda49abb67e50c2a6c002d35dadf3c24c62f964167dd9d56d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: sse transport: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/sse.spec.ts"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec1d93b7f0d314a32dd3a6ee5ae03935efe02bb69afeabf93c2a431724541b7d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: sse transport (config): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/sse.spec.ts"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"be4c3459fd4af63e0d74574f7d1c2bf3b3df776c58ecac2dba77936d630105fe"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: sse transport browser lifecycle (isolated): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/sse.spec.ts"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"263c142e8738165414c41be1c94e0e844710853a9470fad95586b8c8c26600af"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: session log should recover after write failure: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/session-log.spec.ts"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dea304282f2c4c108dcf9d9ffc14468f4147022a96f591d831d4245e1077ce1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: surfaces the missing browser executable path so a version mismatch is diagnosable: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/launch.spec.ts"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf1c3056f8290a9b97fa565af9a2ed2ffc296f3cd51f88406695a44de254ee83"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: proper launch error message for broken browser and persistent context: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/launch.spec.ts"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf6a77c3a89ae17b0a1a83aa26ef271be1d21518016f94889e1aea5c9c614588"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: http transport: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/http.spec.ts"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ddca38b9a71605f5ecea3b8411f423080adbc308d2badb0dfd08f7accc09c74"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: http transport (config): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/http.spec.ts"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"73981a3edd8275cb3a6e24183d0a83c1b91d22146dba395ee5ad12a828eb1472"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: http transport browser lifecycle (isolated): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/http.spec.ts"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"258620151e154a033619c9658883724fa783f10175e0fda570a9cc3d57e21b67"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): http transport browser sigint: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/http.spec.ts"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"75d97886e5a0c3394ebda822bc16d17a43db1b0ccae37eff99610ac65f5ad282"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: http transport browser lifecycle (isolated, multiclient): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/http.spec.ts"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"895b9ac278f33fe95cadfe1eaa0353f5011cd637db03b2e972d4ec58060bd7e8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: http transport browser lifecycle (isolated, concurrent clients): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/http.spec.ts"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e94b921f1fbfe7480c0153a07c589456fe284d1d5375641171fd79af3c696c5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: http transport browser lifecycle (persistent): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/http.spec.ts"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"b57565768a3be029fcec422c34be06c466f3e6d959d3dd9ba34ebf58a4bf613f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: client should receive list roots request: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/http.spec.ts"},"region":{"startLine":600}}}],"partialFingerprints":{"codehealthFindingId/v1":"97857cfb4913dcf9a1be8eeb2aac9c4753b1fe18dd7c17ef5681be647b465b83"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should close session when heartbeat ping is not answered: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/http.spec.ts"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8f9406da9b6aa316eaa44de8414357776ad8e3665f0788537da92db3dc7ec24"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not allow rebinding to localhost: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/http.spec.ts"},"region":{"startLine":708}}}],"partialFingerprints":{"codehealthFindingId/v1":"7db41b8018b8d6d8f11df8d8784c6e009ce475ff56417075f9d20d54717b2b8c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: browser_console_messages default level: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/console.spec.ts"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"b32f6babbc30952dc971935c116d0069b283cd4fd54dcd5a467d848d38d5208f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: browser_console_messages errors only: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/console.spec.ts"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"efa5b42d945d61982bf92be4b8cbbe053870923962a7de1399a7e98124359f8a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: mousewheel: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/cli-mouse.spec.ts"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f2cd5f1e51c2786e0e91ed37aabc6f279ad582b3710cac7815fc3cfce369f05"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should report and intercept network from nested worker: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/workers.spec.ts"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"a698e6838418e2f7ef86f0489e63087006e274f74c48654a69c725af66d66619"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should scroll when nobody is listening: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/wheel.spec.ts"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"46a03d70389477b71189790e3072377ec8b65104389299f51571b60470b913f3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with large DOM: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-text.spec.ts"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0be72b6c2ffe75e57e894c84ac269020ca623ff4f1629f502f2d61566dd2109"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should support disabled fieldset: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-role.spec.ts"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"812f33fc1cc3b4785da342cc022f75bb52c6c82034560dc8dea00049ba8182cf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should take java-style string: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-register.spec.ts"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"b288186004f529bea8b0c6df801f19c17c925dc52351234709e24cae468440ac"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should properly determine visibility of display:contents elements: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-misc.spec.ts"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a52e65948f1d80b0f71fef5d2ad5e6d16497ae4432e47c0b0656e3456fbc36e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: getBy escaping: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-get-by.spec.ts"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b387142ef0bb89db5c985eb5747d0604dc10b19bd5ea9c25e982c5d6ac9e1ec"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: getByRole escaping: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-get-by.spec.ts"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"3427a3e421c7da3de30d94e2855d2b66da5fd128285f768bc8e22758c86def12"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: getByRole with description: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-get-by.spec.ts"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"1843c9cca9c41c0aaeb988374406efa3a9a59b498c11b2f188304e269616610d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: getByRole with description via aria-describedby: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-get-by.spec.ts"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3830ef6d70975abb69f764ed840ccdc72961dfa9912a5210d20b7c910251e2a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: getByRole with description via title fallback: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-get-by.spec.ts"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"1195cc643c7ce8db27d9a4bb39ed5aabed642b38fe0249d9c8325aa6a697b1e5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: getByRole with description whitespace normalization: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-get-by.spec.ts"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0c7b6aa3d12e3893af3eb6bc7c4e7c0c1c1fdb4dc37e35e34374d24736cc07e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: waitFor should survive frame reattach: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-frame.spec.ts"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad082023cc944893c3a1881ddf198dedb4ca3c05d13c510c7414a004aa9cbd37"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: waitForSelector should survive frame reattach (handle): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-frame.spec.ts"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8e57cca6a48b2a09d378334486ea83197f1581f5ba4eb37decc814cd7650004"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: waitForSelector should survive iframe navigation (handle): This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-frame.spec.ts"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc09ddc7ec24ba5b7ac6d53c5f0b86b726d349e74fd0c530d67d4f77d3561742"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: click should survive frame reattach: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-frame.spec.ts"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"d073f3001ebc1c52edc8fdd7d252f18c596eccd19727aabdd1201dcab5e36052"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: click should survive iframe navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-frame.spec.ts"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"0296451b26e2bd63e77422a34702acd7089b2fc497afe6c5afa06ec27c175c36"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: click should survive navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/selectors-frame.spec.ts"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3e2a10d0e217973047a9faa06a06ef52299019079574ccc514cda7a379a6586"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-url.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"8401f64eb7a7959bdd514191136904d7b97664303ac6f297deb97ab3fbdcf28f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with commit and about:blank: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-url.spec.ts"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeba5181dc016afb8a888506022dd170412cbdbc62033c8b4f6135ec44aa73ac"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with clicking on anchor links: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-url.spec.ts"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"703c2b245d39f9ae74e01c9c6c17950936cee87b16b2e3c3094c92a3e312d153"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work on frame: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-url.spec.ts"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbb8d5f9ddc69b1961f4b57aee7150c2b234a488b48f3956e284a1dd7130fc5d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should succeed if element handle was detached while waiting for hidden: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-selector-2.spec.ts"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ddd6a9dec6b9f4d036bf4fe5a4d778d1b1431df15ce4150470ca926d300f9d5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should succeed if element handle was detached while waiting for detached: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-selector-2.spec.ts"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e5bbdc931c22c7f222398ef88085e6f1b5561e4a3a4cb9d03c439ff2d94f6f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should immediately resolve promise if node exists: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-selector-1.spec.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"403c8b9aae74613ef6919e8c76bd234d708b22408351f4cd80d66edb107c2545"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work when node is added through innerHTML: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-selector-1.spec.ts"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"aff94e57e27f4d2924f80f0d48ad54727da8118bde3078d8049ff3d4ec398924"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should pick up ongoing navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-load-state.spec.ts"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"77a204ef27d0b8a8810956893884f1e2ae57168697b0cbc2f01945e0b4c1a0ab"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should resolve immediately if loaded: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-load-state.spec.ts"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"22cb0ce3234fa4d73fcfad0afc16c8c69b0a17371745ef6179c62c28c5c6341c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should resolve immediately if load state matches: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-load-state.spec.ts"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"09f9d85fb36babba71b2e33d54ad80df851cded844c2599cf309aed107699260"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with javascript: iframe: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-load-state.spec.ts"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ab70d1f777c2030ddbc066b4a9df52b7038bc38e9bb9dc1d7e9c851a9e56988"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with broken data-url iframe: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-load-state.spec.ts"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9b5401dbb2dee055167ed97b0e1e591bbe09ada6dfc92c9aa9dc1d80b770ac5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with broken blob-url iframe: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-load-state.spec.ts"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c631508414b51fd2a4cd5173f8e5833f08739935506ee1ea02d4b53355497f2"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should accept a string: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-function.spec.ts"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"58eb1064aeae85cf43720072f837bb5a6825d576c5f4567b1f096ac6da462854"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work when resolved right before execution context disposal: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-function.spec.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1576fd24a30abb0890c66cf498f45c4f0b194aea52b49c5a4bf45ce11f30e78"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should poll on raf: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-function.spec.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aca8a8e02a7e2055e7af2742ae15a93e5bb54a8e58c7477fb4a95505bf6aa36"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should disable timeout when its set to 0: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-function.spec.ts"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"fce54afcb16ed309ac37dd119a9c593b7a9861189641c46be2571242cf227474"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should survive navigations: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-function.spec.ts"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddee7e8539d8a63979e0ef5070226af12d579be4cbd56bb2f582a3a53d508f58"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should wait for predicate with arguments: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-wait-for-function.spec.ts"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"e18730956981a3e087d98d9e9021079e8e5f3f6e85c9c472b8e83e35540f0858"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work fast enough: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-set-content.spec.ts"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"019f51b721481e006b073d9a3d2d2d3ae0704b0d0693316561cf65d2d0425572"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should take fullPage screenshots during navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-screenshot.spec.ts"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a3a1fbf43f3e5b547b17951a3af23a5af89251c381335ed80e1b167fc064163"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work when subframe has stalled navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-screenshot.spec.ts"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"48ecbd59beac5f5677f8cc09032d463d3b2a7736154a2c791f347eee7a2f4e47"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work when subframe used document.open after a weird url: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-screenshot.spec.ts"},"region":{"startLine":616}}}],"partialFingerprints":{"codehealthFindingId/v1":"22e243d287020e1ddf10ce218b8fe8ac9b366d126a01146ddbf2f2836f16c89b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work when POST is redirected with 302: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-route.spec.ts"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f6779cadefec5230ef3421fd358fbc2c066feb76e17e9fa89f858a9d0d137a6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work when header manipulation headers with redirect: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-route.spec.ts"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf23e3fe8fb69da461dc4397b9c9934a8f8a77fa93816def25eb72c54859b511"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not override cookie header: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-route.spec.ts"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ecab3619d6ce7c44053994268b3090d38a923a4c9c4036de41a5349c0ef8a61"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not auto-intercept non-preflight OPTIONS without network interception: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-route.spec.ts"},"region":{"startLine":739}}}],"partialFingerprints":{"codehealthFindingId/v1":"03a30e0f425f030202e77cbb6c0efa9542f5b508557ab98f64738668459632b8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not auto-intercept non-preflight OPTIONS with network interception: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-route.spec.ts"},"region":{"startLine":780}}}],"partialFingerprints":{"codehealthFindingId/v1":"035b2b906c0b95caac4269929165a32b2bea8794c7b67fe3cd6068774bea8162"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should contain sec-fetch headers in route: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-route.spec.ts"},"region":{"startLine":1024}}}],"partialFingerprints":{"codehealthFindingId/v1":"c61bb4a4956fc3af4ade497da62b054fb345a2af136cbfff922172544f9523bb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-request-fallback.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"c16ff924e3a93bb1b55c22a45894fe56ebd22e81d8db7539f8879bf85d001629"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should fall back after exception: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-request-fallback.spec.ts"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c977ddc938cdae138bea91940bc223b25baa8909d67a6e05c5d70514a7171cd"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-request-continue.spec.ts"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf73c01c9f48bede50d2eb0ea900799a5eecf5288fe7e41cc34ecba85dacabc3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should respect set-cookie in redirect response: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-request-continue.spec.ts"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"13d6ec6e693d1d1e24fda142b8d47b1fbf182d3e62f7dc839802b894ce188f91"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: continue should drop content-length on redirects: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-request-continue.spec.ts"},"region":{"startLine":590}}}],"partialFingerprints":{"codehealthFindingId/v1":"2899350874fbcb5fa30806c5c4461346bc93ba05c06fafd9ebdd79aab55e17a9"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should return sizes without hanging: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-network-sizes.spec.ts"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"9844f6a72aafc8291a6075f1a7f136670f89aa3525928e64582ed26b032ebd34"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should wait for networkidle from the popup: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-network-idle.spec.ts"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5b50ff33164630f96af98b1033d3576f29a64a5929e06b747c35d68b880f2ef"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not wait for an open EventSource connection in setContent: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-network-idle.spec.ts"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"c327b3ed7f3c8b6049699cd775bb22927c29252a46c4ae89b1ed4668efdd95a1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with _blank target: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-navigation.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"44c697e516431082d97dc2a33b494cc4d1473e85fd5c21a047afbef561845c7a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with cross-process _blank target: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-navigation.spec.ts"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7a9fa5645952cf95cd3db72c351be1c254c3327c1614535fc73fff2431cc8da"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with _blank target in form: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-navigation.spec.ts"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"21e23e58d620a2edb2a5c55e7aba2b32a7a9ff7e58d643798a5d777f03c7bb6b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should set modifier keys on click: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-mouse.spec.ts"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"de6e929c7a274f8e0ee37aa827be86ba63a297e0f7be5b9e8585c328a6baff28"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not crash on mouse drag with any button: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-mouse.spec.ts"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fdea3b2bcadf03e8f50681470a822f43b09875eb8784343ea320e8458e6ec94"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should dispatch mouse move after context menu was opened: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-mouse.spec.ts"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"05cc1797cfb718f50310a7325025049245b0346afbce24e0429c9317551bad70"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should track hover across iframe boundaries: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-mouse.spec.ts"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e4bd1cf72c79f90baabbe8c63aa914425c6c9342195885c621badf668b0a5ff"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw with ignoreErrors: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-listeners.spec.ts"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"c41b71b4a62f82a422db600160bc778f9924af79a2bed9e337efade93b651a4b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should specify location: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-keyboard.spec.ts"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"d45344cf97979c9307b70fdb9620f49fbe8c0870d2620d26be5fdde9e94811c2"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should press audio and media control keys: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-keyboard.spec.ts"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"8176d5f3f923d2b2a14de51dcf6bcdc1e8c34835aa2217ca0b8ce7bc13ecae40"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should scroll with PageDown: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-keyboard.spec.ts"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"c500a9923a74a45ea908429ab64be6407c5017236088017eefdff32cc35fe824"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should dispatch insertText after context menu was opened: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-keyboard.spec.ts"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"f09a4e1f0450fc620c8863a9f7dc9facef3c54c25c9ecae955871b5b74e00998"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should type after context menu was opened: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-keyboard.spec.ts"},"region":{"startLine":763}}}],"partialFingerprints":{"codehealthFindingId/v1":"be73623d69628d99210286b01c91167ef9d5324889239cf15b3982b44de4c3e8"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): page.reload during renderer-initiated navigation: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-history.spec.ts"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"b877571a29943f746f80a57ccb1d690fcc438457106d1c07ef6e1c47fd5782f8"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): page.goBack during renderer-initiated navigation: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-history.spec.ts"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"d29eeff9c6fdd34c324a2b28e53582f83e40901a713a4ba6a1a5286c2d54e7a1"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): page.goForward during renderer-initiated navigation: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-history.spec.ts"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"48da85eab2d4792429a9e3b37e4a7429d23324ea9464541ae6375d9cf5b4f040"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: regression test for issue 20791: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-history.spec.ts"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0821c42d0dc1275864447443ab71294d847feeea10bd203abc91abd284b4995"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should navigate from file URL to about:blank: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-goto.spec.ts"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d99c909baea3fc9f4b549b523c2537c03b9d8c967cada6cf76ea144b51549d7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with subframes return 204: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-goto.spec.ts"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"906adcfc1c2a8f9dce53d45a67c6f6f1c35d6191b54afc16a6bc09f6c2519311"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with subframes return 204 with domcontentloaded: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-goto.spec.ts"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"7eb4968f0389ae9acfc4d13383ae6438773441370b554863738c363281a84bfc"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not crash when navigating to bad SSL after a cross origin navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-goto.spec.ts"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"e87b8eec198d76f54f36a9086ffe27794cc8b73b3e53adb9ddf2f31b80328197"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw if networkidle0 is passed as an option: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-goto.spec.ts"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"20dcc53d4304349e3253b5233178504832ac2f1fa3dc675431217e92b6eb6c5c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be able to navigate to a page controlled by service worker: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-goto.spec.ts"},"region":{"startLine":695}}}],"partialFingerprints":{"codehealthFindingId/v1":"60baab3398441add6c2b2e9a06eaa5e9f801abb799d7cb96da0fd8fab0e90b1a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not crash when RTCPeerConnection is used: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-goto.spec.ts"},"region":{"startLine":793}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa7b35ed95106614130397fe67619cb5443fc310ab9daccaccfe826f4fc25ddf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: keeps focus on element when attempting to focus a non-focusable element: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-focus.spec.ts"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c3571e3da87e12f94b2e8ee69ad6722bf12e5a00b796ac7cc242fc4e6daf1e1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not throw when filechooser belongs to iframe: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-filechooser.spec.ts"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"32e07b5162417ace7ef3d8025839c2262b62fd4a3aca1fc6509d88dae1dbd45b"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should not throw when frame is detached immediately: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-filechooser.spec.ts"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aaa0ba63d4f9900cd2de3f02efc34c49cafad7d8e00c0fd88c1b6d80ff96d9f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be callable from-inside addInitScript: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-expose-function.spec.ts"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"297cdd948270065e05f728a1845cf6be25adfb520ac4a4d5e5622d111130f43e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: exposeBinding should work in parallel: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-expose-function.spec.ts"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a30f9721e81ce5d0e4ceb6d9e784cf4814b44a39997bf032c59923fce5fc40"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should remove a listener of a non-existing event handler: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-event-pageerror.spec.ts"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7c260a5ba8857d782edb32a7a44c171b416a5cc4da6f11a95edd5691a82d4e4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: do not update console count on unhandled rejections: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-event-console.spec.ts"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"db62e1fba02372f73b065a1e089846710cdf7d94a817cbfd19a3643bae750eac"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should ${title} with tweened mouse movement: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-drag.spec.ts"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"62edf79828df570adbdbbd38d2d468f42322a4d7cc7b3ac60b8ca6f2bc2b3274"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be able to close context with open alert: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-dialog.spec.ts"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"816c6c8f26588c3fb2e5eb58c30c7d63f87f186a84b9b6e97c4b6f55dad76689"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should click links which cause navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-click.spec.ts"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e416f7ee7930182d60019dbbbad4a73041774c28ff11f5b27abf3588e856a82"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should click a button that is overlaid by a permission popup: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-click.spec.ts"},"region":{"startLine":1078}}}],"partialFingerprints":{"codehealthFindingId/v1":"af246775f147e4537671b11af6fbcd3d59030675c0fb17574047456fe330a82f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: ensure events are dispatched in the individual tasks: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-click.spec.ts"},"region":{"startLine":1157}}}],"partialFingerprints":{"codehealthFindingId/v1":"df92015763e713beec3a684252506ce6ef0cd65b508538cfc48803f5e89f6310"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should fire contextmenu event on right click in correct order: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-click.spec.ts"},"region":{"startLine":1221}}}],"partialFingerprints":{"codehealthFindingId/v1":"003510a517ad84f5f430966700a4dc8ed964ffe571458baf4be1b702c3bd9b22"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should click into shadow root with slotted div: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-click.spec.ts"},"region":{"startLine":1298}}}],"partialFingerprints":{"codehealthFindingId/v1":"75a1a7a7401915916acbd41f50a79308229d8a7322df39c233c9e99b1de039d5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should click shadow root button: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-click.spec.ts"},"region":{"startLine":1311}}}],"partialFingerprints":{"codehealthFindingId/v1":"19ca43449dcfafbabccee60e30afa6c6f137fbb857fec77ee91c56427660d870"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should still click when force but hit target is obscured: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-click-timeout-3.spec.ts"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7d5abef94689d75a9b06606289288b476fd9db658eacd1c87e08abce8bd9947"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not hit scroll bar: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-click-scroll.spec.ts"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"53541a9778d9e27975709db9294e458945fb052b4250505172a473933d338ece"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should scroll into view element in iframe: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-click-scroll.spec.ts"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"a63e0fa9f7c2f969e7ce274e50251d8a5601a4b658b4a76fe682563a8b435f3a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not fail with internal error upon navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-click-during-navigation.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"635dd4bf45fc56a1607ae381f354286c7d116702b063959fc62f73ad2dfee1a9"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should fire load when expected: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-basic.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"732a6e5f3f567b691c6676e3efa472990c56e8647109f27dfe7105eb18d66220"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should fire domcontentloaded when expected: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-basic.spec.ts"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f3bbc26866f10c18c6589c4cee4aba64f33408e0b9df4a2a1dc4a2fb60d8e85"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: page.close should work with window.close: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-basic.spec.ts"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"43dd295b0f3b1fd5deb9da888af8e6017bd28b4dea06a0533dcd36f16b7817ca"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should iterate over page properties: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-basic.spec.ts"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"a71f128bb6eb1a2a1528b9e5d7bce1eac18832b8333335b417c2947a881187c0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: clicking on links which do not commit navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-no-hang.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"34a31705c3b76f1ec626da9abaef918e648d0e517a7d2e58af9f2f51953dc8a4"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): calling window.stop async: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-no-hang.spec.ts"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"a218662dd6f2adb6097a8657e088df9b26b5148e5257d2583a0fc45b37fe41fd"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: calling window.stop sync: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-no-hang.spec.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"c037b5bb152d1f99864347fc6f537fdc77089851d8959a9a22337017f3a5fef8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: assigning location to about:blank: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-no-hang.spec.ts"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"48506de74d73041ba215054a991082e02ae6b53b3ca29716d9ba0cf7508f6f3e"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): assigning location to about:blank after non-about:blank: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-no-hang.spec.ts"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"b63d236b4d564603d8f3922549af86b7f53e49b9b22f43b7a420595c37b683d7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: calling window.open and window.close: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-no-hang.spec.ts"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"7de2bb2694d50e7c72d6906cb00c17b6caf74e00f0020b6e14fb8045df7aa50c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: opening a popup: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-no-hang.spec.ts"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"38aa516b17b104d78120c320c4d981bb9975a007acb500a651419ce5c8e077f5"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): clicking in the middle of navigation that aborts: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-no-hang.spec.ts"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4531306751a1c506e0d046fd8cd46765c455bda1eff133ab28d2d378b1d70f7"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): goBack in the middle of navigation that commits: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-no-hang.spec.ts"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfc84c929097bbad9641e10f683ce08f8e4a78b139847dbcba692bbefe83d913"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not stall on JS navigation link: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-basic.spec.ts"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"5743178117095082eb26147e9652a854c9f2031b1ffe429b0aad52cf7a97ed0a"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should work with noWaitAfter: true: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-basic.spec.ts"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"47a452fc32929b3a5e124b32cbb8a056a1137e12ec98c9286b04c3be43eba04f"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should work with dblclick without noWaitAfter when navigation is stalled: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-basic.spec.ts"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"742bd0c01de6b40e52edc6304d892311f4d54374b41aba4beb46b76988af09f6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with goto following click: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-autowaiting-basic.spec.ts"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"59526030feecd5268e503dd3af0c18b52217f3831c905965a7f516df80d77b72"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should snapshot: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"282f13f5d491dad5ff0fee35fac9c46f074985a01fc76c0bd7fca8bf2ec72e03"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should snapshot list: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f82da60d92136b273f3437ebd29c88a5ffd32f800171aab2ce217e46d02eec0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should snapshot list with accessible name: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ece87a89225f6f48796f4c7e0b579e593f7a895c6d9f4d6ffaecfafcee2d4bc"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should quote names that look like regexes: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"be5ce68e121e7e6947d07ef988aaded066eb3b7ec6405547e0e861ecfa7a1a9d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should snapshot complex: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0cd85f1dea42ec2369330a1a1b4f58567dc89d7c74edc13bf623e3e88d6506d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should allow text nodes: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"930fb02522328d9548fbdd5138e02416c69b5ba52caf667fd9da1129484c476d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should snapshot details visibility: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"eecd652fb92360689ddb8cfa4db5525ce51ebbd1a60728ee766a7939e96ab1e7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should snapshot integration: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccce4ad73ff77881c11cfd57b67215d1e7cbd1918ba22a491e4c0599e7a8ea6f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should concatenate span text: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"3281e1be7c764240f6084a7f7490bddda8afbe311b0046b22c4042f9900aa25b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should concatenate span text 2: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"e40be0dc6e5ccaae5c197636d5f5c2278b197aa1e93ea6f4839674d9c72cb2b1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should concatenate div text with spaces: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5291380fe2b40e4beeaf27e306469f81692d4970d1b85fef416b7980144c9e3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should include pseudo in text: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"76a1065130c633580287747b08e4b008c79b746fefca0bbc8f55eb319498faa8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not include hidden pseudo in text: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"774d518c22ebd51aff13463f5939f8df7c545e638914f63d2b12f975b53bf404"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should include new line for block pseudo: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a30db1456352b31196853d9a4f402937e25ebc0b762d372bd6f805b843c99da"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work with slots: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"16a19123b3c42d20605ad8e9f43ce920c9dc0f439613f38374a315cccbfffebb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should snapshot inner text: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"664f34f3e2e6b7341129fb834d7801584bb95b7963de80349d8ee65e3fdc76e9"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should include pseudo codepoints: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"27867d00080d5d8249f462a36dc9d4dffba8052b471ef4191396114254a619de"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: check aria-hidden text: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"3496e1e5372dd3002d76dbd2e9a5df9b1b9c1f6679ee4484497e8dbc99bac8e6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should ignore presentation and none roles: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1f5e89c0bb1d73c3e511573d3546c767b7d87468d7319b65bcce782c3dd7ebb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should treat input value as text in templates, but not for checkbox/radio/file: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"111da67198438d04a327e5da9987bcd35770ab847a199cff8b375d59f5a7fa8c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not use on as checkbox value: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"a14a4dc15b8c3678239fa92dae793e1ee82384c10be01ae86c8a37bf7926fd90"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should respect aria-owns: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"1edf73e6825eb1c03f5cafcde4d3953049dcadb95e345c39dfe2d489fab77ef5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should be ok with circular ownership: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"86cc7a1dc70865f539e25f28d6b6f571b46b942d6b07db8f40919c694966fa90"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should escape yaml text in text nodes: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"b499de01599dadc2dd9a1a32dc0adf755898cbd6c436c824a2a8c17d5c2114c5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should handle long strings: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"13908459d53ae86decd1e762115ab97451e2e69982e6ce4a25c83b9ac64bde69"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should escape special yaml characters: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"b29451619ff544d15145d2db9f139b9b89ad0bb54738ea3e291e811864449393"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should escape special yaml values: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":614}}}],"partialFingerprints":{"codehealthFindingId/v1":"79522523b622f4f2164c604db92c167fc86ba1b3bfd325c8a0501877cd6635b1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not report textarea textContent: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":656}}}],"partialFingerprints":{"codehealthFindingId/v1":"2993b263fb54670dda0b95ef78368350f20e14a5253ca719ffd15ac813c5cd0f"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: match values both against regex and string: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"e238d6c20a3f1c51ff57aa9d63759b3d08e760a624537badcab9f147158fe039"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should snapshot a locator inside a frameset frame: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-aria-snapshot.spec.ts"},"region":{"startLine":784}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fba8dd071ab5d0658481c5d67fd26ed940871fc5bb9e5f68f277a1d9457b7e6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should call a function passed as an argument: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-add-init-script-callback.spec.ts"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"599cdfce0e4dbf4a25196ecb36b7786514669cc8c9b6d737c3411959e6f771ea"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should accept a function as the whole argument: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-add-init-script-callback.spec.ts"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"4251f93cfa147e9b7555ada5f044377f94d579ab6ea0272e322cea9bca0be7b8"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should return the callback result to the page: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-add-init-script-callback.spec.ts"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fabf885bd1fc7d119ae397401a7ce58bbd1fc58de1c7982439e2c8fe64d28bf"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should propagate callback errors to the page: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-add-init-script-callback.spec.ts"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e66e7f23abfa2ee8cbd2160f40d695469b267b3837923d5e37ea2b8ba0f538c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should support multiple callbacks: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-add-init-script-callback.spec.ts"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"f87bd5fa241ba0c9d7a6bc8b07700255e91fdb5bc027774f54fa8bca1bed4f1e"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work in a child frame: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-add-init-script-callback.spec.ts"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"61e188e8d87d7b846222c6eda49da32c8956e41718789fa7f1f1eb29865fef99"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should not register the callback on the global object: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-add-init-script-callback.spec.ts"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"77136f76b96458f0fe78a0879a40eb4c7b5af597287faac0048a0010d23f30b4"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should wait for an attribute to appear: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-wait-for-function.spec.ts"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6d406ddfd44b4daf06f5656888c0598f33d2b1b3bfe32c6f28d1f1065a90898"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should accept ElementHandle arguments: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-wait-for-function.spec.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea26caa0e5311e9543350f4c1c124fcb970d45157ad2ef658da090a38f1b9062"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should accept string expression: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-wait-for-function.spec.ts"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"cca67ff118790be8364803ce7fafe3961624514a3b580f42e52dd4d47d6499a6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should resolve a promise returned by the predicate: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-wait-for-function.spec.ts"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"9efdfa290f08f28ba1619c3fe08fcbc2e661f8ab2845afc954fb66907e400730"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should wait for element to appear and survive rerender: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-wait-for-function.spec.ts"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb7513ed34fac6236fbb1a4497da94010138a1741d7805e57ccd2863cb3df103"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should waitFor hidden: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-misc-2.spec.ts"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5d283de9ee91b04a45c5e25a4802bcf85c46efa241e24ec30dc1e7c8b46ab19"}},{"ruleId":"D10","level":"error","message":{"text":"No assertions (empty test): should wait for frame 2: Test method has an empty body \u2014 it asserts nothing and exercises no code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-frame.spec.ts"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"1262df04b556054dba7b3a8dcf8c1132bbdba4f12b18f06afbc36e4cadd34716"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: waitFor should survive frame reattach: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-frame.spec.ts"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"c84ed2c58d2519700320870af3e556b59a0201c9cebc1d7a8bc4caf9d1ef3386"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: click should survive frame reattach: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-frame.spec.ts"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"55fbbbebd031c69ab37b89a82d984c3f36821a8b666807271dfb39a0a04665d3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: click should survive iframe navigation: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-frame.spec.ts"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"614ddebae3c35a05cf5ea607e130a91a728175a929e16aa66f5501759da1ce29"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should have a nice preview: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-convenience.spec.ts"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3469567ee887d3dec53afeca9617766370c3fa75725fd46f7dd44507298318b"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should click if the target element is removed in pointerup event: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-click.spec.ts"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"174675ea740a5216b5301147a828b6102fe0d9045586d65cf79ef76fecb71e80"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should click if the target element is removed in pointerdown event: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/locator-click.spec.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe89689c05c51993df2f4e1bb539a7b2b729cc81f609d65657b600b6e04306b3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not break remote worker importScripts: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/interception.spec.ts"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"0af2d468e6806b6c1d026d377b071a5a799871098d3a860324b1a3604ff3e511"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should wait for already visible: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/elementhandle-wait-for-element-state.spec.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"e04da7bbb806e6e53cde8bdb1f51b467d1fb1a8e7ab6c06d77656ae8cd9a1ee6"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should wait for already hidden: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/elementhandle-wait-for-element-state.spec.ts"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"20197f9e48f595f0392e7be4f7175f466a427f2815294179a5db37cbe6220cc1"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work for visibility:hidden element: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/elementhandle-scroll-into-view.spec.ts"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0a25259a85aed4fa3b0bb926ff6f689daccc5ae021de44639a8608413a61a38"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should work for zero-sized element: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/elementhandle-scroll-into-view.spec.ts"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"95f6d46206da6c00fd4a82351098f6b9c3cfe47ef9b554adb43dffe4f24f75cd"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should have a nice preview for non-ascii attributes/children: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/elementhandle-convenience.spec.ts"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"89f1e446d62500f00fa9d7aa89e0c8b6d27b109e9bbe84674b8d2153591670ed"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: isVisible should not throw when the DOM element is not connected: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/elementhandle-convenience.spec.ts"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fb5e9cf2e71f4aa7443299f465aa68b1f196b59a8aae814068bd18f0712cf75"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should quit on Q: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/watch.spec.ts"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe2d7bb24e31ca4033181737b3e9d7ad1517717a620d940d3068d8a74eb5c7ad"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should print help on H: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/watch.spec.ts"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3864baf4d393ae46ec1c84a76353637b9ee8cbe1d32e39301c5cc79d1c7e51c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should run tests on Enter: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/watch.spec.ts"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f0159b54cbfe36edcce4b8c454904f140baa5002dcd1c9378f1af65bf6a0e5"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should run tests on R: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/watch.spec.ts"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b1b50d0fd26f0dd399c1a00c59042b0273cc3eb9a1e0e1978539484b78a3c71"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should respect file filter P and split files: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/watch.spec.ts"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"02108ab1cd66a2b83e0f6148533c24717fa19a52182f848728646fff8c3002eb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should run global teardown before exiting: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/watch.spec.ts"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"3219a41d0b3a8f5bf39cd6fc90f4f7a62d31be41f2c9fb7d43ac304aea67b14d"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should stop testrun on pressing escape: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/watch.spec.ts"},"region":{"startLine":717}}}],"partialFingerprints":{"codehealthFindingId/v1":"41406ace35228a04d75daca230abf1b659bc9f6a01fe71669f05f8f00af82824"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: buffer mode: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/watch.spec.ts"},"region":{"startLine":736}}}],"partialFingerprints":{"codehealthFindingId/v1":"90eb0c538fb32d99f3e47e1ad619e84c3f819260fd121134ef302eabb87783ed"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should watch files: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-watch.spec.ts"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"44d189e500a06b9b6a8b58694f3ba5f334e98ae40a738ddbfa7eda11395a0097"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should watch e2e deps: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-watch.spec.ts"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e0c582a455f03203d8fc494ff55ae261d29b54f8665e680450aa9af0f7cf9d7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should run added test in watched file: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-watch.spec.ts"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"e12faa5e37007ebb86b83542036dec4c4f91400210c32b84c4eea3da7b7520d2"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should watch test defined outside of .spec.ts file: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-watch.spec.ts"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb81602767193fec39d0391540fc900e26ff4440e1f74b048fa277fa175c216"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should pick new / deleted files: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-update.spec.ts"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"04a4bb8d43288fb0a29c8e0bee8a7409864d8ec0f0ae2cfbef16327539dab259"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should pick new / deleted tests: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-update.spec.ts"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"57ae5401b35fdd343fea3333936f3b7a41d63c02eea2f14a30383671632ffafa"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should pick new / deleted nested tests: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-update.spec.ts"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b2b858137779baeec60498735a021a618779b980707bdb1c7472c7369848150"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should allow expanding entire subtrees: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-tree.spec.ts"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec1d990e24424d07c7dcc71f684fbccdd04b1d25d35a71a2b9383d7056dcdce3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not leak websocket connections: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-run.spec.ts"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"7565105c4702610fd596f264cfc371a0c3f702c59723600831cc91e9a1232351"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should run test defined outside of .spec.ts file: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-run.spec.ts"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e98e0e0de0f656a6d3bc0740d59cefac0311e1b1920248c3a066203fdef43d3"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should run test defined outside of testdir: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-run.spec.ts"},"region":{"startLine":838}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8c1a51735b64548ffb2ba76a0a558485274331d4acb4582b4398e5ff31c6b61"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should filter by title: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-filters.spec.ts"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"813fbab8b1b3bcacf961569645b2a8552f2e163904e4bdaad01d6c5c12d6f51a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should filter by explicit tags: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-filters.spec.ts"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f322de3bbf6c33917bd6d124c9ed37d4e5b9ee878460a0ea71e597a9a8a41ef"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not hide filtered while running: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-filters.spec.ts"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"b61886472f7c523c68794c1316f0ba0d18406eed5e34c0887045c36dda348aa7"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should filter skipped: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-filters.spec.ts"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"51b1dfcb26e149e5fb02bdaa822fe2b4712c2aaee10eb62fdcdfe23ea68a5a34"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should only show tests selected with --grep: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-filters.spec.ts"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"a49db9394f534281fcaf5eef3217e59d31587326b8c49810e3a7d21658e4858a"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should not show tests filtered with --grep-invert: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-filters.spec.ts"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"ded060e9d4af6a7111c07e276689bfba360cfd977359641b3bbf32bc93e38136"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should filter by only changed files: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/ui-mode-test-filters.spec.ts"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"2464e51891237700b00e5f24f83703aa0a6047671099d08394374f9390b18abb"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: test${i}: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/shuffle.spec.ts"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e239e12be9bc0877f6e9475f5718980200331a89a3ad0e6718a1a6b66435efa"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: test${i}: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/shuffle.spec.ts"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7d2134004ff74fe2b24d25e2bc7c5adf5e0115bbb09f751c89847fc8267542c"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should respect custom shard weights: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/shard.spec.ts"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5686bd92378d0c483fbdfad380842bd2b26442df65f2ed8b06b125ee939c4d0"}},{"ruleId":"D10","level":"warning","message":{"text":"No assertions: should throw in serial mode if test suites in worker are inconsistent with runner: This method\u0027s body runs code, and no assertion call was recognised in it. Recognised by name: Assert*, *Should*/ShouldBe*, Verify, Expect, Throws, Record, Received/DidNotReceive, MustHaveHappened/MustNotHaveHappened, EnsureSuccessStatusCode and *AndEnsure* \u2014 so verification routed through a helper of your own naming, through a base-class or callback object whose members hold the assertions, or through a harness that fails by throwing under some other name, is not visible to this check and is not counted here. Read it as \u0027no assertion this check knows how to see\u0027, and if that is right, add one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/runner.spec.ts"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca232a51ad6aed285a9725820a56a17caee4e0bd9637a74efe5e0ecc6c85894"}},{"ruleId":"D11","level":"error","message":{"text":"Test declared unreliable: tests/library/capabilities.spec.ts: This test is disabled or skipped with a reason naming unreliability \u2014 the repository\u0027s own words: \u0022audio output is unreliable on hosted macOS 15 runners\u0022. A test that is skipped for flakiness is neither passing nor protecting the code it covers; either stabilise it or delete it, but do not leave it disabled indefinitely. (Found by reading the repository\u0027s own test source \u2014 the suite itself was not re-run, since the reliability runner does not support this ecosystem.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/capabilities.spec.ts"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"d86e8ce7c85676d2df947df2f6bbf0ef262845616367e069b4ea1f8bcc69af5b"}},{"ruleId":"D11","level":"error","message":{"text":"Test declared unreliable: tests/mcp/files.spec.ts: This test is disabled or skipped with a reason naming unreliability \u2014 the repository\u0027s own words: \u0022This test is racy\u0022. A test that is skipped for flakiness is neither passing nor protecting the code it covers; either stabilise it or delete it, but do not leave it disabled indefinitely. (Found by reading the repository\u0027s own test source \u2014 the suite itself was not re-run, since the reliability runner does not support this ecosystem.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/files.spec.ts"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"db2b7d6cad99248caa3f49f398845ef0ff653d4a81c8e520e8b37011e6eef834"}},{"ruleId":"D11","level":"error","message":{"text":"Test declared unreliable: tests/page/frame-hierarchy.spec.ts: This test is disabled or skipped with a reason naming unreliability \u2014 the repository\u0027s own words: \u0022frame.name() is racy with BiDi\u0022. A test that is skipped for flakiness is neither passing nor protecting the code it covers; either stabilise it or delete it, but do not leave it disabled indefinitely. (Found by reading the repository\u0027s own test source \u2014 the suite itself was not re-run, since the reliability runner does not support this ecosystem.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/frame-hierarchy.spec.ts"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6bd5eb0d8dcb06282d43921b7ba3acc33d4586cb9968b78dffd1fb7cf01dfe2"}},{"ruleId":"D11","level":"error","message":{"text":"Test declared unreliable: tests/page/frame-hierarchy.spec.ts: This test is disabled or skipped with a reason naming unreliability \u2014 the repository\u0027s own words: \u0022frame.name() is racy with BiDi\u0022. A test that is skipped for flakiness is neither passing nor protecting the code it covers; either stabilise it or delete it, but do not leave it disabled indefinitely. (Found by reading the repository\u0027s own test source \u2014 the suite itself was not re-run, since the reliability runner does not support this ecosystem.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/frame-hierarchy.spec.ts"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"a42e2d899a3b1cf06555aa34ca8345906044aed6d3925b5278da7961cd9f5508"}},{"ruleId":"D11","level":"error","message":{"text":"Test declared unreliable: tests/page/page-basic.spec.ts: This test is disabled or skipped with a reason naming unreliability \u2014 the repository\u0027s own words: \u0022page.frame({ name }) is racy with BiDi\u0022. A test that is skipped for flakiness is neither passing nor protecting the code it covers; either stabilise it or delete it, but do not leave it disabled indefinitely. (Found by reading the repository\u0027s own test source \u2014 the suite itself was not re-run, since the reliability runner does not support this ecosystem.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/page/page-basic.spec.ts"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a7db15044deb8a2210383d6287997b032103f8c129ce90ef6fafb1e247b69e1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/injected/src/roleUtils.ts: packages/injected/src/roleUtils.ts changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 138 in roleUtils.getTextAlternativeInternal at line 687. 4 of those changes were fix/bug commits, and the other 4 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/injected/src/roleUtils.ts\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/injected/src/roleUtils.ts"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"db467556220234b771455162605d6357264f56853ebc4d0c34580352c587e91f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/injected/src/injectedScript.ts: packages/injected/src/injectedScript.ts changed 19 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 57 in InjectedScript.expectSingleElement at line 1518. 4 of those changes were fix/bug commits, and the other 15 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/injected/src/injectedScript.ts\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/injected/src/injectedScript.ts"},"region":{"startLine":1518}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a7bee7985d410a995ce4d79b167cca4669907fce7d31c17a5d192b848a0ee84"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/fetch.ts: packages/playwright-core/src/server/fetch.ts changed 16 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 65 in APIRequestContext._sendRequest at line 326. 7 of those changes were fix/bug commits, and the other 9 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/fetch.ts\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/playwright-core/src/server/fetch.ts"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8b3cb277c7b48519c2ba57cd12c9341e0da61ca4aeb96277a1414bb4a261175"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/frames.ts: packages/playwright-core/src/server/frames.ts changed 29 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 30 in Frame._expectInternal at line 1530. 6 of those changes were fix/bug commits, and the other 23 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/frames.ts\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/playwright-core/src/server/frames.ts"},"region":{"startLine":1530}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd4dd92990806c5791bce6f9922d12962800054458e9aa09a4dfe96aaa421752"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/page.ts: packages/playwright-core/src/server/page.ts changed 21 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 32 in Page.expectScreenshot at line 717. 4 of those changes were fix/bug commits, and the other 17 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/page.ts\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/playwright-core/src/server/page.ts"},"region":{"startLine":717}}}],"partialFingerprints":{"codehealthFindingId/v1":"548f7a33a216758b43f24a15385faf2a94df51c5f3b62c6c782016ef104d743c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/tools/backend/response.ts: packages/playwright-core/src/tools/backend/response.ts changed 16 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 31 in Response._build at line 267. 5 of those changes were fix/bug commits, and the other 11 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/backend/response.ts\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/playwright-core/src/tools/backend/response.ts"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f3dc558ea8bcfd8ede781619910065411e6369309df9214e70b6213aa10e6d4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/chromium/crPage.ts: packages/playwright-core/src/server/chromium/crPage.ts changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 39 in FrameSession._initialize at line 472. 7 of those changes were fix/bug commits, so the churn is repair rather than feature work. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/chromium/crPage.ts\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/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"e17976a468dfc126fa16e84234710cebfdbd51ac4cc4528d5a6a927452a47719"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/browserContext.ts: packages/playwright-core/src/server/browserContext.ts changed 21 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in browserContext.verifyClientCertificates at line 809. 7 of those changes were fix/bug commits, and the other 14 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/browserContext.ts\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/playwright-core/src/server/browserContext.ts"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1b7a00edb0a83b4cdc89d2c6b26188f14fa2eb8e53b6136d31f7261bc6209ca"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: utils/generate_channels.js: utils/generate_channels.js changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 81 in generate_channels.generateChannels at line 239. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- utils/generate_channels.js\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":"utils/generate_channels.js"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"292c55d35d53275b622b7c72b77f184d5c4a221c8e619de991e138b1a13b631c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/tools/cli-client/program.ts: packages/playwright-core/src/tools/cli-client/program.ts changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 57 in program.program at line 77. 4 of those changes were fix/bug commits, so the churn is repair rather than feature work. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/cli-client/program.ts\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/playwright-core/src/tools/cli-client/program.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"286e4e184c5e0092b789340110c897e7543f8e2d96f64c483b4168861ff55946"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/trace/snapshotRenderer.ts: packages/isomorphic/trace/snapshotRenderer.ts changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 55 in snapshotRenderer.snapshotScript at line 322. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/trace/snapshotRenderer.ts\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/isomorphic/trace/snapshotRenderer.ts"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9e4291e3def7fccda452ad9c878e89d86cc9e6061f059b47ca4a0d1bfa99f1a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/locatorGenerators.ts: packages/isomorphic/locatorGenerators.ts changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 46 in locatorGenerators.innerAsLocators at line 86. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/locatorGenerators.ts\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/isomorphic/locatorGenerators.ts"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d8f8ba52246516432d283f43183fbffa7a4ec5eeff4a15f4c19296195062758"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/dom.ts: packages/playwright-core/src/server/dom.ts changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 36 in ElementHandle._performPointerAction at line 391. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/dom.ts\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/playwright-core/src/server/dom.ts"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"1299a4a4de8119135992c79bfc35e8789b97983dcbe2ef35270a68ea6b264e18"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/common/configLoader.ts: packages/playwright/src/common/configLoader.ts changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 87 in configLoader.validateConfig at line 128. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/common/configLoader.ts\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/playwright/src/common/configLoader.ts"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ff3c1367200c36e02cc8a2a8c1fc55f37f032081b649ceea8741bd604616256"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/tools/mcp/program.ts: packages/playwright-core/src/tools/mcp/program.ts changed 19 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in program.decorateMCPCommand at line 34. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/mcp/program.ts\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/playwright-core/src/tools/mcp/program.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"816c09bb980397d2343b3366f371d08fb31edd329617d57f90fe6f6e2ad01e48"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/trace/traceModernizer.ts: packages/isomorphic/trace/traceModernizer.ts changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 34 in TraceModernizer._innerAppendEvent at line 107. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/trace/traceModernizer.ts\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/isomorphic/trace/traceModernizer.ts"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"75afc019129bc7905db04e25a9f3b61a08d3beb1e5e032808808aba077ec3741"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: utils/check_deps.js: utils/check_deps.js changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 78 in check_deps.innerCheckDeps at line 62. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- utils/check_deps.js\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":"utils/check_deps.js"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d50adc7bfe87d278a28c493ac6d091c2cc03d96954a22da0a4a24fcb6957e30"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/injected/src/ariaSnapshot.ts: packages/injected/src/ariaSnapshot.ts changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 52 in ariaSnapshot.generateAriaTree at line 81. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/injected/src/ariaSnapshot.ts\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/injected/src/ariaSnapshot.ts"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"893ef8d582e8aeb101eb42519e911cc26de2a2ebf65227ec714b17eafe371220"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/utilityScriptSerializers.ts: packages/isomorphic/utilityScriptSerializers.ts changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 44 in utilityScriptSerializers.innerSerialize at line 253. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/utilityScriptSerializers.ts\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/isomorphic/utilityScriptSerializers.ts"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ede640ba3b470cd5457e8d3c1e9fdf8c4bfbeea2abefbda23ce8d17e04e2350"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/tools/mcp/config.ts: packages/playwright-core/src/tools/mcp/config.ts changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in config.resolveCLIConfigForCLI at line 158. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/mcp/config.ts\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/playwright-core/src/tools/mcp/config.ts"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd3e35719195e237e9142a6f83603bf224828d2e4abcade7ff6963de13b0add4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts: packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 146 in snapshotterInjected.frameSnapshotStreamer at line 34. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts\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/playwright-core/src/server/trace/recorder/snapshotterInjected.ts"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"e25a85c7fd27b26cf95b13891c9ecb83e9e152078b8151eb32fd5fd71934259a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/trace/traceModel.ts: packages/isomorphic/trace/traceModel.ts changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in TraceModel.constructor at line 98. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/trace/traceModel.ts\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/isomorphic/trace/traceModel.ts"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"b34384332709a9b688122085eff4ccbf311a07a9cc8edd5aa2674f572ecd6585"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/client/browserContext.ts: packages/playwright-core/src/client/browserContext.ts changed 19 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in BrowserContext.constructor at line 99. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/client/browserContext.ts\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/playwright-core/src/client/browserContext.ts"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a18b0443306ce364d1b5cc3387d6ed50608e6a8b83c37d3398c27afe7bd7c64"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/frameSelectors.ts: packages/playwright-core/src/server/frameSelectors.ts changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in FrameSelectors._callOnSelectorInternal at line 243. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/frameSelectors.ts\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/playwright-core/src/server/frameSelectors.ts"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"366e91227bc61b428f21729c494672b368cb45451c95b2eae2166d2a9de416aa"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/common/config.ts: packages/playwright/src/common/config.ts changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in FullConfigInternal.constructor at line 57. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/common/config.ts\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/playwright/src/common/config.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f9c06c077a450adc25bdb78913681ddf44d717c8d034a53c7d68a7dfebb67c5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/client/fetch.ts: packages/playwright-core/src/client/fetch.ts changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 39 in APIRequestContext._innerFetch at line 179. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/client/fetch.ts\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/playwright-core/src/client/fetch.ts"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"0af784f1b462a5bb057491415b3db83c55ecb48c89a024a13cbdd9df4595f972"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/worker/testTracing.ts: packages/playwright/src/worker/testTracing.ts changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in TestTracing.stopIfNeeded at line 173. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/worker/testTracing.ts\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/playwright/src/worker/testTracing.ts"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9ae62ec47f58864ac49d41bb92ec742e7081636e465154331eb4c749c4ebfef"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/worker/testInfo.ts: packages/playwright/src/worker/testInfo.ts changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in TestInfoImpl._addStep at line 289. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/worker/testInfo.ts\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/playwright/src/worker/testInfo.ts"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"3af156da305d9bf9c065d919162eca393d96192a274e1866541626727a00184f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/client/frame.ts: packages/playwright-core/src/client/frame.ts changed 16 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in Frame.constructor at line 73. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/client/frame.ts\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/playwright-core/src/client/frame.ts"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e3bdddb7f85db1cbd15faf232db2bb48b58b3c418d8c6a0fdf38b8025011622"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/webkit/wkPage.ts: packages/playwright-core/src/server/webkit/wkPage.ts changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in WKPage._initializeSessionMayThrow at line 164. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/webkit/wkPage.ts\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/playwright-core/src/server/webkit/wkPage.ts"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1e4f111943d1bc86173de566a11d9aa8738b897ca5dbfb2fe80678ead7eae79"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/workbench.tsx: packages/trace-viewer/src/ui/workbench.tsx changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 45 in workbench.PartitionedWorkbench at line 75. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/workbench.tsx\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/trace-viewer/src/ui/workbench.tsx"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cf62c755a11fb773eb25cd90143bf62bc22f30e65158be7408a1b9d24519e64"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts: packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 24 in BrowserContextDispatcher.constructor at line 71. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts\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/playwright-core/src/server/dispatchers/browserContextDispatcher.ts"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"b68cdbbb8fef7742314675201e2db2a6b794db8e89ff55dd451253485d0481e3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/webkit/webview/wvPage.ts: packages/playwright-core/src/server/webkit/webview/wvPage.ts changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 27 in WVPage._onConsoleMessage at line 532. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/webkit/webview/wvPage.ts\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/playwright-core/src/server/webkit/webview/wvPage.ts"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"05b1e024e98925b26cfffa2fdeb56d60daa9ecdee12cfe40ef90ec5fa8662467"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/worker/workerMain.ts: packages/playwright/src/worker/workerMain.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 43 in WorkerMain._runTest at line 292. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/worker/workerMain.ts\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/playwright/src/worker/workerMain.ts"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"e57580b9ca70b9b704770c693c83bb0037ba6b6d8f8f802db6068bfab76957eb"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/dispatchers/dispatcher.ts: packages/playwright-core/src/server/dispatchers/dispatcher.ts changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in DispatcherConnection.dispatch at line 297. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/dispatchers/dispatcher.ts\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/playwright-core/src/server/dispatchers/dispatcher.ts"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"211e5426d31ce4d49f1702532cb9f9d062ad8db639bbc68a15da0c56cd56628e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/protocol/src/serializers.ts: packages/protocol/src/serializers.ts changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 30 in serializers.innerSerializeValue at line 156. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/protocol/src/serializers.ts\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/protocol/src/serializers.ts"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"e97279f6019efa5d5456b7ea00a60501599c447a7c181904541d4292fcf6f221"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/matchers/expect.ts: packages/playwright/src/matchers/expect.ts changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in expect.callMatcherAsStep at line 329. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/matchers/expect.ts\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/playwright/src/matchers/expect.ts"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7d321f0a3953409f8dc78494bbbd9f5fcacb816b52f6c91827f965917ee088c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/uiModeView.tsx: packages/trace-viewer/src/ui/uiModeView.tsx changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 88 in uiModeView.UIModeView at line 97. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/uiModeView.tsx\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/trace-viewer/src/ui/uiModeView.tsx"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"f32aa0efa0abeaa61ceb3991fd2a45ab140958350ef4c6a6a5b394fc49d7f487"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/runner/dispatcher.ts: packages/playwright/src/runner/dispatcher.ts changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in JobDispatcher._onDone at line 502. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/runner/dispatcher.ts\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/playwright/src/runner/dispatcher.ts"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"61428b31bf31b8c7d7477f5292c0f82df798c5ea62afc44f99ba259442a89e77"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/snapshotTab.tsx: packages/trace-viewer/src/ui/snapshotTab.tsx changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in snapshotTab.InspectModeController at line 291. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/snapshotTab.tsx\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/trace-viewer/src/ui/snapshotTab.tsx"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"063bba69b348f4e03c1fe56a2dc94fd7bee82bbfd8a8f989d83a050e01587d57"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/har/harTracer.ts: packages/playwright-core/src/server/har/harTracer.ts changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in HarTracer._onWebSocket at line 444. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/har/harTracer.ts\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/playwright-core/src/server/har/harTracer.ts"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bed261b77b882ae5834c55b6720d5e6ae4b36a63b88e33148f2d20e7e977fc1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/matchers/toMatchAriaSnapshot.ts: packages/playwright/src/matchers/toMatchAriaSnapshot.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 31 in toMatchAriaSnapshot.toMatchAriaSnapshot at line 41. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/matchers/toMatchAriaSnapshot.ts\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/playwright/src/matchers/toMatchAriaSnapshot.ts"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bd911fd03c35ada80f29e9d02d6102c7dd2d58caaf52f12727a726202fcb5bc"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: utils/doclint/cli.js: utils/doclint/cli.js changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 47 in cli.run at line 50. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- utils/doclint/cli.js\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":"utils/doclint/cli.js"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"71e846e3a245e866799d6a8c2cc31efecddbbbe9cc7137c9a92ab24f80d24563"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: utils/generate_types/index.js: utils/generate_types/index.js changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in TypesGenerator.classBody at line 261. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- utils/generate_types/index.js\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":"utils/generate_types/index.js"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"40100f16e04c10a6bbea1e6e4ab778477f819fb714a478ee6a49a0c8bea80053"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/trace/traceLoader.ts: packages/isomorphic/trace/traceLoader.ts changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in TraceLoader.load at line 39. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/trace/traceLoader.ts\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/isomorphic/trace/traceLoader.ts"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"21131c814099d3978097b64d2f1d2ec74daeb77b69efaa4b19020e8fd4d89d58"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/codegen/python.ts: packages/isomorphic/codegen/python.ts changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in PythonLanguageGenerator._generateActionCall at line 107. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/codegen/python.ts\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/isomorphic/codegen/python.ts"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"8393d27a051f9ba63a789db61e3642340ecd85ce59bd1ed9e88ee635816a090e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/reporters/base.ts: packages/playwright/src/reporters/base.ts changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in base.formatFailure at line 404. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/reporters/base.ts\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/playwright/src/reporters/base.ts"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8f851567d36b84a56e04f3fd3e4a42e7933f0becff19820e1aa61b1263332f6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/ariaSnapshotRenderer.ts: packages/isomorphic/ariaSnapshotRenderer.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 43 in ariaSnapshotRenderer.renderAriaSnapshotAsYaml at line 27. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/ariaSnapshotRenderer.ts\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/isomorphic/ariaSnapshotRenderer.ts"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"77f895a3bb436d8e20d439109ea2d1a666c7cf7352f058dcbd4664423c27bbcd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/runner/tasks.ts: packages/playwright/src/runner/tasks.ts changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in tasks.createLoadTask at line 289. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/runner/tasks.ts\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/playwright/src/runner/tasks.ts"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"532be3b123124724eb66f65fb60c8f68e97cb5edccd2af12c69883a0ba81bc4a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/codegen/java.ts: packages/isomorphic/codegen/java.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 24 in JavaLanguageGenerator._generateActionCall at line 114. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/codegen/java.ts\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/isomorphic/codegen/java.ts"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"6363b6ae12fb086bc7b1d9e52c94eaf4d98c8385759b1671b9dd149d83fcda1c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/matchers/toMatchSnapshot.ts: packages/playwright/src/matchers/toMatchSnapshot.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in toMatchSnapshot.toHaveScreenshot at line 331. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/matchers/toMatchSnapshot.ts\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/playwright/src/matchers/toMatchSnapshot.ts"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"09d21efe8ce12c2304057ceadcbb92523c674d3f23f57f32ed011317d9c895c7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/selectorParser.ts: packages/isomorphic/selectorParser.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in selectorParser.parseSelector at line 44. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/selectorParser.ts\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/isomorphic/selectorParser.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff9aee2cfa7053782d343d80953c045e2043eab860b7e83f69c2667efa53f913"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/sw/main.ts: packages/trace-viewer/src/sw/main.ts changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in main.doFetch at line 138. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/sw/main.ts\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/trace-viewer/src/sw/main.ts"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7061cfb1bcdde99aba52d7c5b941171673f913063ac9529c9b96704a8c3cc10"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/client/network.ts: packages/playwright-core/src/client/network.ts changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in Route._innerFulfill at line 373. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/client/network.ts\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/playwright-core/src/client/network.ts"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"636e3365e4a71944f1e6e8a8050288ab12eec9c7bd0e40853e555f425ea91f96"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/utils/network.ts: packages/utils/network.ts changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in network.httpRequest at line 48. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/utils/network.ts\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/utils/network.ts"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"340dcac59fa1e611d9a18b4b772fda09629a2c677c0a91863e116de8d51720cc"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/injected/src/roleSelectorEngine.ts: packages/injected/src/roleSelectorEngine.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 33 in roleSelectorEngine.queryRole at line 143. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/injected/src/roleSelectorEngine.ts\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/injected/src/roleSelectorEngine.ts"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"99a57cb3ec38180d59d9551fa578491e1a5443fcea1895766d5fb30f0952658b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/injected/src/selectorGenerator.ts: packages/injected/src/selectorGenerator.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 33 in selectorGenerator.buildTextCandidates at line 280. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/injected/src/selectorGenerator.ts\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/injected/src/selectorGenerator.ts"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"77c6beae00d41f11dba27860da6e4275754f957388343e1f868a4481f0a76b1a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/cli/browserActions.ts: packages/playwright-core/src/cli/browserActions.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 32 in browserActions.launchContext at line 65. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/cli/browserActions.ts\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/playwright-core/src/cli/browserActions.ts"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7e1bc7284a1c0bc6902d0f6f3152c7f93255e46b30ad2931e8ae6fca7031114"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/runner/loadUtils.ts: packages/playwright/src/runner/loadUtils.ts changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in loadUtils.createRootSuite at line 120. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/runner/loadUtils.ts\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/playwright/src/runner/loadUtils.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fedc3473bc5857cbe0666dc92752476768e84f9253379c451e16d66bf6db5d5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/common/testType.ts: packages/playwright/src/common/testType.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in TestTypeImpl._describe at line 126. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/common/testType.ts\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/playwright/src/common/testType.ts"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"44915d8d67b2ec955ad5af89c78707f6c3ef9b9edcf83d28d343e81c55059fd7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/injected/src/recorder/recorder.ts: packages/injected/src/recorder/recorder.ts changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in RecordActionTool.onInput at line 369. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/injected/src/recorder/recorder.ts\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/injected/src/recorder/recorder.ts"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"74aa3e9559a9863c677962334bf99b5fb24e7c4f6f5f33a897eaafaba6ec8a41"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/html-reporter/src/testResultView.tsx: packages/html-reporter/src/testResultView.tsx changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in testResultView.TestResultView at line 79. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/html-reporter/src/testResultView.tsx\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/html-reporter/src/testResultView.tsx"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"70207d817ea5cadbede06575762d7afcd331f1359fd0fe4b634f4b71e9a35ae4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/client/connection.ts: packages/playwright-core/src/client/connection.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in Connection.dispatch at line 235. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/client/connection.ts\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/playwright-core/src/client/connection.ts"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9652daea32588e94524fb269b9ce1145bc930cf33fb4c829aa44120ca54a3e1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/tools/trace/traceRequests.ts: packages/playwright-core/src/tools/trace/traceRequests.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in traceRequests.traceRequest at line 75. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/trace/traceRequests.ts\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/playwright-core/src/tools/trace/traceRequests.ts"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"b03b2e1b9efb7ccc29672ecb6ec130ed42bb25e165353ff9396d264cc25df0cb"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/locatorParser.ts: packages/isomorphic/locatorParser.ts changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in locatorParser.tokenize at line 57. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/locatorParser.ts\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/isomorphic/locatorParser.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e398e7eb2f4ba3e8fe6182eff28fed41b2be12966eebf4d53cb808822d1d46a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/ariaModeView.tsx: packages/trace-viewer/src/ui/ariaModeView.tsx changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in ariaModeView.AriaModeView at line 148. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/ariaModeView.tsx\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/trace-viewer/src/ui/ariaModeView.tsx"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"17bb3e5a0cee8e6824544df40366cd910073d2b6577392f39ea75c633ce5479a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/actionList.tsx: packages/trace-viewer/src/ui/actionList.tsx changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in actionList.renderAction at line 135. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/actionList.tsx\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/trace-viewer/src/ui/actionList.tsx"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad3fdaaaafed81a02ac3a2817e422e96da7161b84b517c80ec611df339cf154b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/codegen/javascript.ts: packages/isomorphic/codegen/javascript.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in JavaScriptLanguageGenerator.generateAction at line 53. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/codegen/javascript.ts\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/isomorphic/codegen/javascript.ts"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"e23f71630f5bcf0212b8b2c45635006e40b87884655fc64b57508c749bc050e7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/consoleTab.tsx: packages/trace-viewer/src/ui/consoleTab.tsx changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 39 in consoleTab.useConsoleTabModel at line 64. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/consoleTab.tsx\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/trace-viewer/src/ui/consoleTab.tsx"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeebc1e1b4e8550f865ac34af051218c2405fa1e8441c866945bf98c5e454e41"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/chromium/crNetworkManager.ts: packages/playwright-core/src/server/chromium/crNetworkManager.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in InterceptableRequest.createResponseBodyCallback at line 594. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/chromium/crNetworkManager.ts\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/playwright-core/src/server/chromium/crNetworkManager.ts"},"region":{"startLine":594}}}],"partialFingerprints":{"codehealthFindingId/v1":"075859c00046845bea1d3126b863b9ba2ee53f0b22fc1812d7b2a89b862325da"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/codegen/csharp.ts: packages/isomorphic/codegen/csharp.ts changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in CSharpLanguageGenerator._generateActionInner at line 78. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/codegen/csharp.ts\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/isomorphic/codegen/csharp.ts"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"149e61589f8daba796aeae35c70119cc6fb95c45beb82b5f4a15dc459b52f9ad"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/workbenchLoader.tsx: packages/trace-viewer/src/ui/workbenchLoader.tsx changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 37 in workbenchLoader.WorkbenchLoader at line 27. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/workbenchLoader.tsx\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/trace-viewer/src/ui/workbenchLoader.tsx"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"a690a9f5484c81af8e5f2adf4cddb78b3a1a43f77d9e8b66222d731aaa8d5a71"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/runner/testGroups.ts: packages/playwright/src/runner/testGroups.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 24 in testGroups.createTestGroups at line 30. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/runner/testGroups.ts\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/playwright/src/runner/testGroups.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b6a8ff4987cf2007ff03b4ce91a903cdd2cd55d1d0647d04913c0681feec90d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/harBackend.ts: packages/playwright-core/src/server/harBackend.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in HarBackend._harFindResponse at line 96. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/harBackend.ts\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/playwright-core/src/server/harBackend.ts"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b03ebcd6e31865803281742d222ba8335a86c474bb47d08966bc6c58acda894"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/localUtils.ts: packages/playwright-core/src/server/localUtils.ts changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in localUtils.zip at line 44. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/localUtils.ts\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/playwright-core/src/server/localUtils.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ab267cb781ec44f8264f2b23f21b75e08442c5c91210a5836bf2cf9eca2bea6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/utils/hostPlatform.ts: packages/utils/hostPlatform.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 33 in hostPlatform.calculatePlatform at line 41. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/utils/hostPlatform.ts\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/utils/hostPlatform.ts"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9c78b0f5873d1da88a78da2e211aba6899aa25264d6c7dbfcbf08dce4c00319"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/utils/stackTrace.ts: packages/utils/stackTrace.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in stackTrace.parseStackFrame at line 45. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/utils/stackTrace.ts\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/utils/stackTrace.ts"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"8740ac5444f2a9f3a76ba20cd0a8c87143ae861244713588ca1f01ec0ade5534"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/tools/cli-client/session.ts: packages/playwright-core/src/tools/cli-client/session.ts changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in Session.startDaemon at line 114. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/cli-client/session.ts\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/playwright-core/src/tools/cli-client/session.ts"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"33a3f89ca894a8f691e9bed8c3bb0d47400f4f8d1e33ac56fcc7d929e803ca87"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/timeline.tsx: packages/trace-viewer/src/ui/timeline.tsx changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 32 in timeline.Timeline at line 37. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/timeline.tsx\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/trace-viewer/src/ui/timeline.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"2df194657d6c5b05639ca0f0b7efded50000121d6f58806a303d8b1331b85579"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/playbackControl.tsx: packages/trace-viewer/src/ui/playbackControl.tsx changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 31 in playbackControl.usePlayback at line 48. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/playbackControl.tsx\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/trace-viewer/src/ui/playbackControl.tsx"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef03e759e9f0661055ccd30774facec8ce1d20ab2499d8bdc34a91e0fc99675f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/trace/snapshotServer.ts: packages/isomorphic/trace/snapshotServer.ts changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in SnapshotServer.serveResource at line 83. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/trace/snapshotServer.ts\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/isomorphic/trace/snapshotServer.ts"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"21a26e670987487e752624082060e1b2b19b3553c7bb187c5395f6331c9c2e7c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/sourceTab.tsx: packages/trace-viewer/src/ui/sourceTab.tsx changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in sourceTab.useSources at line 37. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/sourceTab.tsx\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/trace-viewer/src/ui/sourceTab.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"6893f94a58fbdb9f1f5b26e11300ed0b405a1839d2e72fa5f21c07352a6ef33f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/common/fixtures.ts: packages/playwright/src/common/fixtures.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in FixturePool._appendFixtureList at line 118. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/common/fixtures.ts\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/playwright/src/common/fixtures.ts"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"97ec7effbd6fc62cae1018bcb5ae3ccdf80b56f091433b8226741174b466abf6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/isomorphic/urlMatch.ts: packages/isomorphic/urlMatch.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in urlMatch.resolveGlobBase at line 214. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/isomorphic/urlMatch.ts\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/isomorphic/urlMatch.ts"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"d650aba5967fa799864d4f00bd1a0af182c0ae5db361b4ffed437e2e3752d210"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/remote/playwrightServer.ts: packages/playwright-core/src/remote/playwrightServer.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in PlaywrightServer.constructor at line 55. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/remote/playwrightServer.ts\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/playwright-core/src/remote/playwrightServer.ts"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e1c5c716d225095869a69b9ded41ceb263a3060430e85b562b5402b5388239f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/transport.ts: packages/playwright-core/src/server/transport.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in WebSocketTransport._connect at line 81. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/transport.ts\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/playwright-core/src/server/transport.ts"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"f184085b5edb3e91133d8a6f5fa1de485bb4b7e91f7f33d69293bd927f96999f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/reporters/html.ts: packages/playwright/src/reporters/html.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in HtmlReporter.onExit at line 171. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/reporters/html.ts\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/playwright/src/reporters/html.ts"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ef6f295c096e7765fd59df00293b46f39533128ec5e9d763530a993489af715"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/utils/processLauncher.ts: packages/utils/processLauncher.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 24 in processLauncher.launchProcess at line 133. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/utils/processLauncher.ts\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/utils/processLauncher.ts"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1ca51754d813d575742f8cfad4a1f3d36dcc22448f86862389315a4d01479f3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/tools/trace/traceActions.ts: packages/playwright-core/src/tools/trace/traceActions.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in traceActions.traceAction at line 65. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/trace/traceActions.ts\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/playwright-core/src/tools/trace/traceActions.ts"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e7a18a93570a055936c68aabc84385e2a2626a20c3a642cdd551be8edbb2cbb"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/debugger.ts: packages/playwright-core/src/server/debugger.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in Debugger.onBeforeCall at line 120. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/debugger.ts\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/playwright-core/src/server/debugger.ts"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"57e4a25249183b5170f6616ef8a6dd6ca3f4871954a2ecfb9203c16c571657b6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/server/progress.ts: packages/playwright-core/src/server/progress.ts changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in ProgressController.run at line 82. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/progress.ts\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/playwright-core/src/server/progress.ts"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"a123ec9340860d25efdf3cf445f5792601b6cbfe0f6b62cd574de7c95e186f40"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright/src/cli/testActions.ts: packages/playwright/src/cli/testActions.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in testActions.overridesFromOptions at line 110. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright/src/cli/testActions.ts\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/playwright/src/cli/testActions.ts"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fd25003d439104bb9cd6353b3ab804909a1f2607c6ea2084135fdae613ef7af"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/trace-viewer/src/ui/attachmentsTab.tsx: packages/trace-viewer/src/ui/attachmentsTab.tsx changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in attachmentsTab.AttachmentsTab at line 95. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/trace-viewer/src/ui/attachmentsTab.tsx\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/trace-viewer/src/ui/attachmentsTab.tsx"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e61bf811214d6d2e3c0231208326453ec7bc2a815af7b17ca3913549445463e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/extension/src/ui/connect.tsx: packages/extension/src/ui/connect.tsx changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in connect.ConnectApp at line 39. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/extension/src/ui/connect.tsx\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/extension/src/ui/connect.tsx"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"780b345680fe50e7473a15d6a7043af76f5315f1a1838b1e3d87cd3d80b89710"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/injected/src/selectorUtils.ts: packages/injected/src/selectorUtils.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in selectorUtils.matchesAttributePart at line 31. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/injected/src/selectorUtils.ts\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/injected/src/selectorUtils.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c3d77279de563705ed9e4384623e1a7a5b42424938c5d824dccee6394830265"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/playwright-core/src/cli/installActions.ts: packages/playwright-core/src/cli/installActions.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in installActions.installBrowsers at line 90. 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-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/cli/installActions.ts\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/playwright-core/src/cli/installActions.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"fea5cdb3ff4decb17180dce7ec2c1b9be37a132fc7b0d1ab8c8832b4d816542c"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: packages/playwright-core/src/tools/mcp/extensionContextFactory.ts: packages/playwright-core/src/tools/mcp/extensionContextFactory.ts changed 7 times in last 90 days and 6 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 9 (its worst body is extensionContextFactory.createExtensionBrowser at line 29), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(mcp): honor --user-data-dir in extension mode (#42190)\u201D; \u201Cfix(mcp): mention PLAYWRIGHT_MCP_EXECUTABLE_PATH in extension not found error (#42122)\u201D; \u201Cfix(mcp): pass noDefaults for extension CDP connections (#42119)\u201D; \u201Cfix(mcp): validate Host and Origin on CDP relay WebSocket upgrades (#42103)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-06-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/mcp/extensionContextFactory.ts\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/playwright-core/src/tools/mcp/extensionContextFactory.ts"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"0587c223fded4c7441882aafe7488989acf4d4d399cb5e8715b7ebc01c92043e"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: packages/playwright-core/src/tools/mcp/browserFactory.ts: packages/playwright-core/src/tools/mcp/browserFactory.ts changed 9 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 8 (its worst body is browserFactory.createPersistentBrowser at line 186), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(mcp): connect each client to the shared browser separately (#42622)\u201D; \u201Cfix(mcp): report the actual remote browser name in browserInfo (#42228)\u201D; \u201Cfix(mcp): honor --user-data-dir in extension mode (#42190)\u201D; \u201Cfix(registry): evaluate \u0060defaultCacheDirectory\u0060 lazily (#41942)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-06-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/mcp/browserFactory.ts\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/playwright-core/src/tools/mcp/browserFactory.ts"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a810e43056c295c3632c0be3c4041531fa7b6e205ccbe3a74bda892f88a5d1c"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: packages/playwright-core/src/tools/mcp/cdpRelay.ts: packages/playwright-core/src/tools/mcp/cdpRelay.ts changed 6 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 10 (its worst body is CDPRelayServer._openConnectPageInBrowser at line 148), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(mcp): time out extension connection when a token is passed (#42525)\u201D; \u201Cfix(mcp): honor --user-data-dir in extension mode (#42190)\u201D; \u201Cfix(mcp): validate Host and Origin on CDP relay WebSocket upgrades (#42103)\u201D; \u201Cfix(mcp): reconnect to the browser after disconnect (#41966)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-06-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/mcp/cdpRelay.ts\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/playwright-core/src/tools/mcp/cdpRelay.ts"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"312e91bc5f6243c0af6c3572dfa7575c3c66f2100d3c607d02d1dfc3ef4be562"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: packages/playwright-core/src/tools/mcp/index.ts: packages/playwright-core/src/tools/mcp/index.ts changed 5 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 3 (its worst body is index.createConnection at line 29), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(mcp): connect each client to the shared browser separately (#42622)\u201D; \u201CRevert \u0022fix(mcp): drop the backend after browser_close with a shared browser\u0022 (#42492)\u201D; \u201Cfix(mcp): drop the backend after browser_close with a shared browser (#42365)\u201D; \u201Cfix(mcp): wait for client event stream before server-\u003Eclient requests (#41559)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-06-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/mcp/index.ts\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/playwright-core/src/tools/mcp/index.ts"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"68f57fb7091cd65ad042f542fd34b88e474912ed1d8edbfa5c49bdff6b229bf3"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: packages/playwright-core/src/server/browser.ts: packages/playwright-core/src/server/browser.ts changed 4 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 5 (its worst body is Browser.newContext at line 105), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(client-certificates): respect launch proxy and proxy.bypass (#42873)\u201D; \u201Cfix(chromium): replay execution contexts when connecting to Android WebView (#42447)\u201D; \u201Cfix(mcp): validate Host and Origin on CDP relay WebSocket upgrades (#42103)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-06-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/browser.ts\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/playwright-core/src/server/browser.ts"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"64397e1b5590b9705f1b37c5b97866cf32ac341be436f1fca8fe089d96d911bb"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: packages/playwright-core/src/server/chromium/chromiumSwitches.ts: packages/playwright-core/src/server/chromium/chromiumSwitches.ts changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 3 (its worst body is chromiumSwitches.chromiumSwitches at line 56), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(chromium): disable more background requests to Google services (#42909)\u201D; \u201Cfix(chromium): stop disabling BoundaryEventDispatchTracksNodeRemoval (#42294)\u201D; \u201Cfix(chromium): disable BlockOriginHeaderModificationOnRedirect (#41696)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-06-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/server/chromium/chromiumSwitches.ts\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/playwright-core/src/server/chromium/chromiumSwitches.ts"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab5d70da67b8ba66eac29216725c3e303551ad70751eefead9373214620564da"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: packages/playwright-core/src/tools/utils/mcp/http.ts: packages/playwright-core/src/tools/utils/mcp/http.ts changed 3 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 8 (its worst body is http.installHttpTransport at line 61), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix(mcp): do not run heartbeat for clients without the event stream (#42189)\u201D; \u201Cfix(mcp): only enable /killkillkill under test (#42133)\u201D; \u201Cfix(mcp): wait for client event stream before server-\u003Eclient requests (#41559)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-06-27..2026-09-25, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-27 17:39:27 -07:00\u0027 --until=\u00272026-09-25 17:39:27 -07:00\u0027 --full-history --no-merges -- packages/playwright-core/src/tools/utils/mcp/http.ts\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/playwright-core/src/tools/utils/mcp/http.ts"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"479ff5d63b09af939dd8d185d69d84b25c9718cc54df615a06e30c26e54598c2"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 9 significant file(s) lose their only recent owner: packages/playwright/src/reporters/perfetto.ts, packages/trace-viewer/src/ui/filmStrip.tsx, packages/utils/crypto.ts, packages/playwright-core/src/tools/backend/find.ts, packages/playwright-core/src/server/overlay.ts, packages/trace-viewer/src/ui/videoThumbnails.ts, packages/playwright-core/src/server/webkit/webview/syncServer.ts, packages/dashboard/src/transport.ts (\u002B1 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d64d3e5afba11f588f55e93846813a75a35352119df4e6c3cf4f5f9cbcb86708"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 8 significant file(s) lose their only recent owner: packages/extension/src/relayConnection.ts, packages/extension/src/connectedTabGroup.ts, packages/playwright-core/src/tools/mcp/browserModel.ts, packages/extension/src/background.ts, packages/utils/webp/webp.ts, packages/playwright-core/src/tools/mcp/cdpRelayV2.ts, packages/playwright-core/src/tools/mcp/protocol.ts, packages/extension/src/ui/status.tsx. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9111af2251e94c0be89b2117a850a28d6ee7834689667d7f78e4bdd839179871"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 3 significant file(s) lose their only recent owner: packages/playwright/src/common/fixtures.ts, utils/bisect-chromium.mjs, packages/playwright/src/transform/esmLoaderSync.ts. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"339e565809d5827f516e365f37b6725088d7147561603691de04af3fb44bf7b0"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 3 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (24 single-owned of 553 analysed files in total, 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; 553 of the 788 production source files in this repository met that bar). They are anonymized user #4 (2 file(s)), anonymized user #5 (1 file(s)), anonymized user #6 (1 file(s)) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"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":"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":"cbabe58347712df4c83ab208eb1373f870ad34a96ddfc6df8c50aaba2d4b9a51"},"properties":{"commitSha":"9ba375c06344835d783fe60bf33f857f9bc208a4"}},{"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":"0cf85cac997946c1f74dbc63b95816a6324930b1cfb2ef94b0fbbe47db3feefc"},"taxa":[{"id":"CWE-78","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":"c77a61a417e0af88bbe807174f3c337ed9c756799567fad8d7af93782afd0edf"},"taxa":[{"id":"CWE-94","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":"c6e90eff449d95207dcb2954763b054ecf4fe17b56978c8d0a72aa970d83aa1a"},"taxa":[{"id":"CWE-78","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":"ef254e06bbeb91968699ae267511d0d5c92a16a9aed69abbbf511d18072b8ae3"},"taxa":[{"id":"CWE-78","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":"015b1c2126dedffce02ea9997370ca85f745451f754d174ea17416ddec4eeb82"},"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":"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":"d0f959968d1b42a337da9bba70c16196fd51f987cb0658cb68742756f342982a"},"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":"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":"4d2a9226a4d7a3c3a12f633509c5c9ef39909d503ae5ea7b8bb6f33c24066ac6"},"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":"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":"bcbccf0d2c7a3b30ed4b79a795fb43522f14b7b9dbc99adee10800e44f7269c9"},"taxa":[{"id":"CWE-250","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":"bda4e05d7192891e331b80371143b35bbc9992afd616787d4483be40f043abe4"},"taxa":[{"id":"CWE-250","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":"93a880b5f94dda4ad8fc4e97e4fca89146ee1670898b1c66f60d32271d315902"},"taxa":[{"id":"CWE-94","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":"50602e5d5eaea901605b9b470d10f31eecd54aba55d70c1ce06885cbad790b99"},"taxa":[{"id":"CWE-94","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":"a735f618e3fb63661c903ceac6866e2f88faed90cc90a50e140b475c8898698a"},"taxa":[{"id":"CWE-94","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":"aa6ecddbd353795caf25b5621e08a88526d02a528d44f5ba41a0072c309abb8f"},"taxa":[{"id":"CWE-94","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":"669d822b17348e10eda80078b9a0505051fe54b41551df156d3cca35f406d3e7"},"taxa":[{"id":"CWE-94","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":"775da8db94d6ddda5e97d1167f18bb146ad33480e84190bc7bcac77f91674861"},"taxa":[{"id":"CWE-94","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":"00676426cc171baf0a22d44179c8c85430e1aa7d55824e1be346116e41e54822"},"taxa":[{"id":"CWE-346","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-940","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":"65420f92671c861a4efc621ad06aaab539c2490004ea8e2b2d9b2585a651f9a9"},"taxa":[{"id":"CWE-78","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":"34cec301033e396b598a2ffc5372bc73d539806c18896ac6ccdb7eefa2bace00"},"taxa":[{"id":"CWE-494","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":"6b40d2d487174d98c5aaedd923fa64c29672ea12d27096341966ea7850fb15fb"},"taxa":[{"id":"CWE-494","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":"e249ac84779830f39b2d8b301bf031389000d783023365bf4c9214c044e2cc43"},"taxa":[{"id":"CWE-78","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":"f914275c689de7ace69273e1086739f6c16f00371c4c6e4b88e9db8bb054f595"},"taxa":[{"id":"CWE-78","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":"7deb854cf0647f64a1cb9ec209ffbdb0dabdd562ab84c158c756a0595e2dd7dd"},"taxa":[{"id":"CWE-494","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":"b945853d30e3b1d4c90f5b50786484f9ec0164d37db53d6866d1f1d8d4d9c152"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1352","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":"b434b2648016d8150f74e613d40818df2f0358d04632040a843a779d143de5a7"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1352","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":"ec023ce58e33727fbce0f682e9caa3868b95f4ba2c13e6e81bb0ca52ddb2a815"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1352","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":"5b3fdc0afb8f7998a7f44291102a7689c1962059674c4858849d7eb35c0ea297"},"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":"585f13d33f5aee60b572e36eea2be25ceaf7cc65b1056cd8e8fdfd98fd49f9b5"},"taxa":[{"id":"CWE-457","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":"142696c4546d1ba309247b46d31a48943cb31bc4e66e6cbf59d2d818c6ba38dc"},"taxa":[{"id":"CWE-22","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":"d0b89464800694f8a0cca0bcc9c58c730556568886b6571d4762314276e84d52"},"taxa":[{"id":"CWE-125","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":"fc8dba47ddfb040fc0c3f2455fb95c39aa9659d7e6c2c783f9220dcf0e624852"},"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":"d7e831edbe7d984ad8713aac36ba51ae16e77d6da53a8c0e247c5c582347ae6e"},"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":"50df5abf69cb3bf195a4f3dc4b60b62480305aeaf0273d9d17225620e6f67b8e"},"taxa":[{"id":"CWE-345","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":"b0e9a2541e576da576b48dcad91d07f7feaac91331fca1d0e3eeb85922ca0f0d"},"taxa":[{"id":"CWE-345","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":"245033373f854f17115385599cb47d6282e2b6d4d62f62ec6ef251aebd68baf2"},"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":"dc1800479c2a2a47a80493d8540fc402d65c8fcd4f7cdc716a925f4a6c026604"},"taxa":[{"id":"CWE-319","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":"616443942d88303d72ac33913ca51e5c81004fbc8702c47f03404232e633ffdf"},"taxa":[{"id":"CWE-79","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":"5a31a0b5364830f542d37385755d27dd90f97746286a80cb6c17836bc6e14179"},"properties":{"dependency":{"package":"js-yaml","version":"4.3.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"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":"a2e781aeeb54d3ae845ae518d9f9b4fabc9ce4afb31ec2d5eceab2c30473e850"},"properties":{"dependency":{"package":"nanoid","version":"3.3.15","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"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":"56d7c0542bcbbd8d8c61f07327aa2080292f8d213e8f982f1a0933ffecde0a9c"},"properties":{"dependency":{"package":"brace-expansion","version":"1.1.15","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"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":"e135dfe5f4d6ba8a601b6749ba248f7e32e004a5ee6f2a32bac704b2e131caa6"},"properties":{"dependency":{"package":"brace-expansion","version":"5.0.7","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"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":"59e28f0fc3ceb219b9638eae73d38b2bcb54c3283507449da6396114e6cfcf26"},"properties":{"dependency":{"package":"ip-address","version":"10.2.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"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":"a123c7a8538ef5659aefc6b6b9bf5ef92557f2acc40c94c7874d873c9193a516"},"properties":{"dependency":{"package":"postcss","version":"8.5.16","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"98645b36f3d8a19e1462b10ae8d23a6853b810993981c4fc4065e762fff2771b"},"properties":{"dependency":{"package":"qs","version":"6.15.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"112b84fc785af3113eafeddf92a935023776df038193f6b6b991fdf808dc9011"},"properties":{"dependency":{"package":"hono","version":"4.12.27","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"3d2bb79bd4f80a4780ca7e472a075f26a44aad315c96226e27e07a07fd1e6099"},"properties":{"dependency":{"package":"electron","version":"42.5.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"production","file":"packages/playwright-client/types/types.d.ts","line":18960}}}},{"ruleId":"D30","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":"001ad3525c46f220718563e23b19592fc804dd9bde0f853922c82e5332bf600f"},"properties":{"dependency":{"package":"@hono/node-server","version":"1.19.14","advisory":"[GHSA redacted]","reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","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":"848b6a7cdd047568d89b5ad41d5b02d9020fb0d2994ad75d1d62a4f6900d8e21"},"properties":{"dependency":{"package":"fast-xml-parser","version":"5.5.7","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"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":"3645396c673ede4114ae90f6775b74b8b076a1243f2d042a499feeb34b3d0640"}},{"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":"06c94b403e859f99ade4d2fe1ee7f7fa3abdda2123a0d15d01c9ca1437c59764"},"taxa":[{"id":"CWE-345","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fd7fb01650168a6675e9b7f1a712ff0ae06f68b41ae5fb5d75ba8429a3ea3ddf"}},{"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":"f0d3b029d1d484c11fec905a28c5000a4eba0a1693cbc96ea21e731ec5190940"},"taxa":[{"id":"CWE-345","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0540a63e301c109ec481c5aa4e39f8d58a70260595631c5e71cadc5e2e343cd9"}},{"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":"0f7d1cbf4088664875a37e50927a12ce667f7f36ec046e7ae5fcdebc07d0999a"},"taxa":[{"id":"CWE-345","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-494","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":"1ead416cc66e9279f3f2b1097868f0970a75d4146f5ac8b497cf027a0788428a"},"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":"bd8e345f3be2ea346aaf4a8311ade88f81378f9e69e244dfb60f1394edae5ede"},"taxa":[{"id":"CWE-1357","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":"1d199bc1595d85eb6eb7b401da8df11b367227d2f298366f529415c8c28234fc"}},{"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":"d28fd98139877cacea9a386e0575c1e722a910881fb5b86a86a58c6464807584"}},{"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":"2b9ed263721214494d15749a361baf76742384ce268f59a1157f30cc49175548"}},{"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":"3b9597bd4acdb2cf6724bf92d3a3c3d8b192f82c66dbb0957a433c0db07304f7"}},{"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":"600eb1fd9149903f32c487a010c91e7a9198dcf3890cbbc48c3d45e9d2bf2468"},"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":"650e1b6c3626a59c4c0f4ff7f1c4f8959360e16dd7738c2cd075ebf476e68301"},"taxa":[{"id":"CWE-1357","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":"aaa6815cb937bb8f51cf005e56db3de8fb262dd2d0abfe4bb3a014243e0e9dc4"}},{"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":"02bba919139b1addbc3f575bb3a39a6d767f911a3a48725ea8f35d5c01e6ecac"}},{"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":"abc917bbe297801b0730034e8cc9121909920da0090304e4fd66dc8f0609138d"}},{"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":"524e1d81a0865b7450b7ddc305f000f275cc575fb058360ae49bfd79a113f6c7"}},{"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":"c8f1beeeb65c2c36826a90c79878dc9b781d9d32bfbea768a4549e4538fb2949"},"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":"5c1b31a164574e76ee305dec3f6cbf5d20e260a315e285b6a0c4bfd0b27e4629"},"taxa":[{"id":"CWE-1357","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":"4e8ca7207d5fb923bffd8f430bc440066b766bb679c38a561e9bf5d21fd07782"}},{"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":"841a729ea1336fe990147b245de0a1f76f06a84fa3ae6200bc9c6f31af4666c6"}},{"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":"b0032d05fd2d96e78c307c47c75d46688ef0b706284b2b82d2001daee67f9fda"}},{"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":"532ecc01da73128beb6522849aae93374724b96a37f810d1acb88489cd4ee016"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned files with no living knowledge: 11 of 553 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; 553 of the 788 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: utils/linux-browser-dependencies/inside_docker/list_dependencies.js, browser_patches/firefox/juggler/SimpleChannel.js, browser_patches/firefox/juggler/Helper.js, utils/flakiness-dashboard/processing/dashboard_compressed_v1.js, packages/utils/image_tools/stats.ts, utils/doclint/dotnetXmlDocumentation.js, browser_patches/firefox/juggler/protocol/Dispatcher.js, browser_patches/firefox/juggler/protocol/PrimitiveTypes.js (and 3 more). 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":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: injectedScript.ts \u2194 selectors.ts: \u0060packages/injected/src/injectedScript.ts\u0060 (context injected) and \u0060packages/playwright-core/src/server/selectors.ts\u0060 (context playwright-core) sit in DIFFERENT parts of the tree yet change together 90% of the time (19 of the 21 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 19 shared commits counted here, the most recent 3 are \u0060b6e168a9\u0060 chore(recorder): render highlights via the shared element highlight (\u2026; \u0060313de29f\u0060 feat(locator): introduce locator.describe() (#35969); \u0060807d9066\u0060 chore: allow generating aria references (#35132) (at that commit the file was still \u0060packages/playwright-core/src/server/injected/injectedScript.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a29a37257dbefd5833c6b82202b5ce3f5f7e1937683b19173454cc9de271ad6e"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: selectorParser.ts \u2194 locator.ts: \u0060packages/isomorphic/selectorParser.ts\u0060 (context isomorphic) and \u0060packages/playwright-core/src/client/locator.ts\u0060 (context playwright-core) sit in DIFFERENT parts of the tree yet change together 65% of the time (11 of the 17 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 11 shared commits counted here, the most recent 3 are \u0060d7775efb\u0060 feat(selectors): add pierceFrames context option (#42033); \u0060d0c1b736\u0060 feat(selectors): support entering frames while piercing (#42031); \u00607ffedf3c\u0060 feat: add pierceFrames() locator API (#41963) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/selectorParser.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"03cece0a8e4bf45904135c45896d9797203670d42262fb2a58a4fcf998538c64"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: locatorGenerators.ts \u2194 selectors.ts: \u0060packages/isomorphic/locatorGenerators.ts\u0060 (context isomorphic) and \u0060packages/playwright-core/src/server/selectors.ts\u0060 (context playwright-core) sit in DIFFERENT parts of the tree yet change together 62% of the time (13 of the 21 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 13 shared commits counted here, the most recent 3 are \u0060313de29f\u0060 feat(locator): introduce locator.describe() (#35969) (at that commit the file was still \u0060packages/playwright-core/src/utils/isomorphic/locatorGenerators.ts\u0060); \u006097d55e27\u0060 fix(locator): \u0060locator(locator)\u0060 method uses \u0060internal:chain\u0060 instead\u2026 (at that commit the file was still \u0060packages/playwright-core/src/utils/isomorphic/locatorGenerators.ts\u0060); \u0060160888df\u0060 feat(locators): reland \u0060locator.and(locator)\u0060 (#22850) (at that commit the file was still \u0060packages/playwright-core/src/utils/isomorphic/locatorGenerators.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd40cce884d5922141a4f857fae6af3cc655b29bb5d4e71135a8557e3b2d1fe1"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: consoleApi.ts \u2194 selectors.ts: \u0060packages/injected/src/consoleApi.ts\u0060 (context injected) and \u0060packages/playwright-core/src/server/selectors.ts\u0060 (context playwright-core) sit in DIFFERENT parts of the tree yet change together 62% of the time (13 of the 21 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 13 shared commits counted here, the most recent 3 are \u0060807d9066\u0060 chore: allow generating aria references (#35132) (at that commit the file was still \u0060packages/playwright-core/src/server/injected/consoleApi.ts\u0060); \u0060bd2fdd0f\u0060 chore: land experimental tools (#34503) (at that commit the file was still \u0060packages/playwright-core/src/server/injected/consoleApi.ts\u0060); \u0060160888df\u0060 feat(locators): reland \u0060locator.and(locator)\u0060 (#22850) (at that commit the file was still \u0060packages/playwright-core/src/server/injected/consoleApi.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/consoleApi.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7441a896991ad7d3646f5f9801411303ceb546e1bf7f1c5bc4ff3c8dbde6cf3"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: expect.ts \u2194 zones.ts: \u0060packages/playwright/src/matchers/expect.ts\u0060 (context playwright) and \u0060packages/utils/zones.ts\u0060 (context utils) sit in DIFFERENT parts of the tree yet change together 60% of the time (6 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u006090ec8383\u0060 chore: move zones into platform (#34786) (at that commit the file was still \u0060packages/playwright-core/src/server/utils/zones.ts\u0060); \u0060be6caed8\u0060 chore: remove expectZone (#34312) (at that commit the file was still \u0060packages/playwright-core/src/utils/zones.ts\u0060); \u00603bdbe428\u0060 fix(steps): make expect.toPass and expect.poll step containers (#30389) (at that commit the file was still \u0060packages/playwright-core/src/utils/zones.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/matchers/expect.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3f5940807014e8932cab204d2ae76cfd62e6ca81fd999a84e027335c217f4ff"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: snapshotRenderer.ts \u2194 snapshotterInjected.ts: \u0060packages/isomorphic/trace/snapshotRenderer.ts\u0060 (context isomorphic) and \u0060packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts\u0060 (context playwright-core) sit in DIFFERENT parts of the tree yet change together 57% of the time (12 of the 21 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 12 shared commits counted here, the most recent 3 are \u0060da681cf1\u0060 chore(trace): track snapshot targets via generation counter (#40766); \u0060395696ea\u0060 fix(trace-viewer): block meta refresh and sandbox snapshot iframes (#\u2026 (at that commit the file was still \u0060packages/playwright-core/src/utils/isomorphic/trace/snapshotRenderer.ts\u0060); \u0060d7f8595f\u0060 fix(tracing): resourceOverrides issues (#38750) (at that commit the file was still \u0060packages/playwright-core/src/utils/isomorphic/trace/snapshotRenderer.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/snapshotRenderer.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eee70a83b46ed57cbe5d401acd179ae6553085c86bb6903d8dfa6dcdef91b9da"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: utilityScript.ts \u2194 page.ts: \u0060packages/injected/src/utilityScript.ts\u0060 (context injected) and \u0060packages/playwright-core/src/server/page.ts\u0060 (context playwright-core) sit in DIFFERENT parts of the tree yet change together 55% of the time (6 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u0060fd7d249e\u0060 chore: cleanup runtimeGuid and other builtins bits (#36035); \u00606af41232\u0060 chore: evaluate \u0060UtilityScript\u0060 lazily (#36019); \u0060d57f1946\u0060 chore: extract page bindings controller from \u0060UtilityScript\u0060 (#35996) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/utilityScript.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ac21b5caf9fabaff2e37bcac40317fa30841f33b5dcd8b5a5b2ff7435a49371"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: traceViewer.ts \u2194 traceLoaderBackends.ts: \u0060packages/playwright-core/src/server/trace/viewer/traceViewer.ts\u0060 (context playwright-core) and \u0060packages/trace-viewer/src/sw/traceLoaderBackends.ts\u0060 (context trace-viewer) sit in DIFFERENT parts of the tree yet change together 53% of the time (8 of the 15 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u0060185bfb7d\u0060 fix(trace): operate trace uri, not path (#38566); \u006047fbd3a5\u0060 chore: remove HMR support from trace viewer (#37785) (at that commit the file was still \u0060packages/trace-viewer/src/sw/traceModelBackends.ts\u0060); \u00608c1002a9\u0060 fix(sw): fix UI mode on codespaces by not passing \u0060server\u0060 (#33664) (at that commit the file was still \u0060packages/trace-viewer/src/sw/traceModelBackends.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/viewer/traceViewer.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"790a4856f854ead64e075da0d472e2c10acc66335a320ea2214280af85218a2c"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: traceModernizer.ts \u2194 testTracing.ts: \u0060packages/isomorphic/trace/traceModernizer.ts\u0060 (context isomorphic) and \u0060packages/playwright/src/worker/testTracing.ts\u0060 (context playwright) sit in DIFFERENT parts of the tree yet change together 53% of the time (10 of the 19 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 10 shared commits counted here, the most recent 3 are \u006087ca8496\u0060 chore(trace): use a single id for calls and test runner steps (#42430); \u00609642f576\u0060 feat(trace): attribute requests to service workers and api request co\u2026; \u0060c8fc3bf8\u0060 feat(trace-viewer): add \u0022Display Aria\u0022 mode (#42211) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceModernizer.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cb7b6992e0ea4f25ae3f7cd224a302adeedce26abad321085fd7c6c240f827c"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: entries.ts \u2194 tracing.ts: \u0060packages/isomorphic/trace/entries.ts\u0060 (context isomorphic) and \u0060packages/playwright-core/src/server/trace/recorder/tracing.ts\u0060 (context playwright-core) sit in DIFFERENT parts of the tree yet change together 50% of the time (10 of the 20 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 10 shared commits counted here, the most recent 3 are \u0060c8fc3bf8\u0060 feat(trace-viewer): add \u0022Display Aria\u0022 mode (#42211); \u006055eddb8f\u0060 chore(trace): show playwright version in metadata (#38158) (at that commit the file was still \u0060packages/trace-viewer/src/types/entries.ts\u0060); \u0060ec40890f\u0060 fix(tracing): use page swap timestamp to find closest screenshot (#32\u2026 (at that commit the file was still \u0060packages/trace-viewer/src/entries.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/entries.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e836397d16c2843167676fc715cc0f34ecd308a851a062606d87c9a3b12c5609"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: dashboardChannel.ts \u2194 dashboardApp.ts: \u0060packages/dashboard/src/dashboardChannel.ts\u0060 (context dashboard) and \u0060packages/playwright-core/src/tools/dashboard/dashboardApp.ts\u0060 (context playwright-core) sit in DIFFERENT parts of the tree yet change together 50% of the time (7 of the 14 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 7 shared commits counted here, the most recent 3 are \u0060a6786ebe\u0060 feat(cli): include aria snapshot in annotate output (#40432); \u006010095c0c\u0060 feat(dashboard): cancel CLI annotate on client disconnect (#40347); \u0060e575acda\u0060 feat(dashboard): add \u0027show --annotate\u0027 to capture annotations as PNG \u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/dashboardChannel.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6fdfcffed60a40f28b04fe7e0a79c342e0dbb1ab518287e9086765bf78a9567"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: channelOwner.ts \u2194 zones.ts: \u0060packages/playwright-core/src/client/channelOwner.ts\u0060 (context playwright-core) and \u0060packages/utils/zones.ts\u0060 (context utils) sit in DIFFERENT parts of the tree yet change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u006090ec8383\u0060 chore: move zones into platform (#34786) (at that commit the file was still \u0060packages/playwright-core/src/server/utils/zones.ts\u0060); \u00603bdbe428\u0060 fix(steps): make expect.toPass and expect.poll step containers (#30389) (at that commit the file was still \u0060packages/playwright-core/src/utils/zones.ts\u0060); \u006073fce8fb\u0060 chore: replace Zones with AsyncLocalStorage (#30381) (at that commit the file was still \u0060packages/playwright-core/src/utils/zones.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/channelOwner.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"07070608ff13b2555ad2531cc424fd40a9f3c3b0e3b0b753ac910669c40583fe"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: connection.ts \u2194 zones.ts: \u0060packages/playwright-core/src/client/connection.ts\u0060 (context playwright-core) and \u0060packages/utils/zones.ts\u0060 (context utils) sit in DIFFERENT parts of the tree yet change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u006090ec8383\u0060 chore: move zones into platform (#34786) (at that commit the file was still \u0060packages/playwright-core/src/server/utils/zones.ts\u0060); \u0060f0a3a15e\u0060 chore: explicitly reset apiZone instead of everything (#34265) (at that commit the file was still \u0060packages/playwright-core/src/utils/zones.ts\u0060); \u006073fce8fb\u0060 chore: replace Zones with AsyncLocalStorage (#30381) (at that commit the file was still \u0060packages/playwright-core/src/utils/zones.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/connection.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df05729574bf8facc26083c7b7b2b84bafd557322b7cc2d7aa5d57f44a674f08"}},{"ruleId":"D35","level":"error","message":{"text":"Boundary-crossing change coupling: testInfo.ts \u2194 zones.ts: \u0060packages/playwright/src/worker/testInfo.ts\u0060 (context playwright) and \u0060packages/utils/zones.ts\u0060 (context utils) sit in DIFFERENT parts of the tree yet change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) \u2014 the bounded-context boundary may be in the wrong place, or one context is leaking into the other. This is the behavioural boundary violation a static scan can\u0027t see. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u006090ec8383\u0060 chore: move zones into platform (#34786) (at that commit the file was still \u0060packages/playwright-core/src/server/utils/zones.ts\u0060); \u0060be6caed8\u0060 chore: remove expectZone (#34312) (at that commit the file was still \u0060packages/playwright-core/src/utils/zones.ts\u0060); \u00603bdbe428\u0060 fix(steps): make expect.toPass and expect.poll step containers (#30389) (at that commit the file was still \u0060packages/playwright-core/src/utils/zones.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/worker/testInfo.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2002e86cea6b999eb6334de3920a8884af59e72cbbd4e131db700ea62200002"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling clique: bidiExecutionContext.ts, crExecutionContext.ts, wkExecutionContext.ts: 3 files \u2014 \u0060packages/playwright-core/src/server/bidi/bidiExecutionContext.ts\u0060, \u0060packages/playwright-core/src/server/chromium/crExecutionContext.ts\u0060, \u0060packages/playwright-core/src/server/webkit/wkExecutionContext.ts\u0060 \u2014 all change together with no explicit dependency: a fully-connected co-change clique, not 3 separate couplings. They share one concern (thin parallel siblings over a common abstraction), so extract the shared part into ONE unit and the whole clique\u0027s coupling clears at once \u2014 you do not need to break each pair individually."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiExecutionContext.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca396f266a1589c61af52285e7cb030b7251fadc711108145acb3e11c9fdbae8"}},{"ruleId":"D35","level":"warning","message":{"text":"Change-coupling hub: TargetRegistry.js \u2192 FrameTree.js, PageAgent.js, Runtime.js, main.js, Protocol.js: \u0060browser_patches/firefox/juggler/TargetRegistry.js\u0060 changes together with 5 other files \u2014 \u0060browser_patches/firefox/juggler/content/FrameTree.js\u0060, \u0060browser_patches/firefox/juggler/content/PageAgent.js\u0060, \u0060browser_patches/firefox/juggler/content/Runtime.js\u0060, \u0060browser_patches/firefox/juggler/content/main.js\u0060, \u0060browser_patches/firefox/juggler/protocol/Protocol.js\u0060 \u2014 none of which declares a dependency on it: one file is the hub of 5 separate couplings, not 5 unrelated pairs. Read the hub first: if the others each duplicate a part of what it does, the shared concern belongs in ONE unit and extracting it clears every edge at once; if the hub is a registry, dispatcher or barrel that must name each of them, the coupling is structural and the question is whether that list can be discovered instead of enumerated. Fixing the hub is one change; breaking the couplings one pair at a time is 5."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/TargetRegistry.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"16d44d11a39149d2d1d35437c41fea133609b4fb6c8f8f92586acf0967f28450"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: locator.ts \u2194 selectors.ts: \u0060packages/playwright-core/src/client/locator.ts\u0060 and \u0060packages/playwright-core/src/server/selectors.ts\u0060 change together 81% of the time (17 of the 21 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 17 shared commits counted here, the most recent 3 are \u0060313de29f\u0060 feat(locator): introduce locator.describe() (#35969); \u0060807d9066\u0060 chore: allow generating aria references (#35132); \u0060bd2fdd0f\u0060 chore: land experimental tools (#34503) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/locator.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"39c4ac3ab2a2f7d2015248fe46df49f6477050a9e33baa808cf520b355319718"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: androidServerImpl.ts \u2194 browserServerImpl.ts: \u0060packages/playwright-core/src/androidServerImpl.ts\u0060 and \u0060packages/playwright-core/src/browserServerImpl.ts\u0060 change together 80% of the time (8 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u0060c8a1674b\u0060 chore: move slowmo and logging to dispatcher from server core (#36966); \u0060a7599ad5\u0060 feat(api): add host option in launchServer options (#30999); \u006014a1eaa4\u0060 chore: add Playwright to attribution (#23447) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/androidServerImpl.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c35efc338e38e7be6471a554861f01de1e5bc6fccfa2bcf5a2f33ac4563c856b"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: index.ts \u2194 tasks.ts: \u0060packages/playwright/src/plugins/index.ts\u0060 and \u0060packages/playwright/src/runner/tasks.ts\u0060 change together 79% of the time (11 of the 14 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 11 shared commits counted here, the most recent 3 are \u006010c9602c\u0060 chore: cleanup more ct remnants (#42200); \u0060ae106c05\u0060 Revert \u0022feat(test): support per-project webServer configuration (#408\u2026; \u0060ed918508\u0060 feat(test): support per-project webServer configuration (#40869) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/plugins/index.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55179ae4e09813cae780a006be2f4b2cdddf2aa411e2f782328db8dfecfac859"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: dashboard.tsx \u2194 dashboardChannel.ts: \u0060packages/dashboard/src/dashboard.tsx\u0060 and \u0060packages/dashboard/src/dashboardChannel.ts\u0060 change together 79% of the time (11 of the 14 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 11 shared commits counted here, the most recent 3 are \u0060c28b53e6\u0060 feat(dashboard): add a debugger actions panel (#41711); \u006083584954\u0060 chore(dashboard): remove browser_pick_locator remnants (#40351); \u006010095c0c\u0060 feat(dashboard): cancel CLI annotate on client disconnect (#40347) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/dashboard.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa6ff18aedacc4c0c1fb89f5ca0927017708720595b40478f627e5da5ada842d"}},{"ruleId":"D35","level":"warning","message":{"text":"Change-coupling hub: PageHandler.js \u2192 FrameTree.js, PageAgent.js, main.js, Protocol.js: \u0060browser_patches/firefox/juggler/protocol/PageHandler.js\u0060 changes together with 4 other files \u2014 \u0060browser_patches/firefox/juggler/content/FrameTree.js\u0060, \u0060browser_patches/firefox/juggler/content/PageAgent.js\u0060, \u0060browser_patches/firefox/juggler/content/main.js\u0060, \u0060browser_patches/firefox/juggler/protocol/Protocol.js\u0060 \u2014 none of which declares a dependency on it: one file is the hub of 4 separate couplings, not 4 unrelated pairs. Read the hub first: if the others each duplicate a part of what it does, the shared concern belongs in ONE unit and extracting it clears every edge at once; if the hub is a registry, dispatcher or barrel that must name each of them, the coupling is structural and the question is whether that list can be discovered instead of enumerated. Fixing the hub is one change; breaking the couplings one pair at a time is 4."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/PageHandler.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5af56d06ea0cd086541f0cb5702d9ebbda6a3adebd448408b7db2e62e7dc8acf"}},{"ruleId":"D35","level":"warning","message":{"text":"Change-coupling hub: BrowserHandler.js \u2192 NetworkObserver.js, PageAgent.js, main.js, Protocol.js: \u0060browser_patches/firefox/juggler/protocol/BrowserHandler.js\u0060 changes together with 4 other files \u2014 \u0060browser_patches/firefox/juggler/NetworkObserver.js\u0060, \u0060browser_patches/firefox/juggler/content/PageAgent.js\u0060, \u0060browser_patches/firefox/juggler/content/main.js\u0060, \u0060browser_patches/firefox/juggler/protocol/Protocol.js\u0060 \u2014 none of which declares a dependency on it: one file is the hub of 4 separate couplings, not 4 unrelated pairs. Read the hub first: if the others each duplicate a part of what it does, the shared concern belongs in ONE unit and extracting it clears every edge at once; if the hub is a registry, dispatcher or barrel that must name each of them, the coupling is structural and the question is whether that list can be discovered instead of enumerated. Fixing the hub is one change; breaking the couplings one pair at a time is 4."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/BrowserHandler.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f301f1cfcffe50f40f2d1f21f04a5e84244a04d2242a5c9752507151ae716a52"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: loaderMain.ts \u2194 loaderHost.ts: \u0060packages/playwright/src/loader/loaderMain.ts\u0060 and \u0060packages/playwright/src/runner/loaderHost.ts\u0060 change together 67% of the time (8 of the 12 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u0060c758b150\u0060 fix(test): use synchronous module customization hooks (#40891); \u00600a51cf8e\u0060 feat(test runner): config.tag for a global tag (#37846); \u0060342bae6c\u0060 chore: support esm loader on Node 20 (#23269) (at that commit the files were still \u0060packages/playwright-test/src/loader/loaderMain.ts\u0060 and \u0060packages/playwright-test/src/runner/loaderHost.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/loader/loaderMain.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"48a60ad206f94ccbdb0a6f38746f8b47f227f0c61b875337c33898717c4c3060"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: crPage.ts \u2194 ffPage.ts: \u0060packages/playwright-core/src/server/chromium/crPage.ts\u0060 and \u0060packages/playwright-core/src/server/firefox/ffPage.ts\u0060 change together 66% of the time (47 of the 71 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 47 shared commits counted here, the most recent 3 are \u0060974edd3f\u0060 feat(dialog): add dialogclosed event (#42014); \u0060bc97a130\u0060 fix(screencast): acknowledge frames after callbacks (#41898); \u00606949e055\u0060 feat: Add \u0060location()\u0060 to \u0060WebError\u0060 (#39767) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"344bfdb3c30793ef1e65871e7041d91216095b4db84c8cfaa65f909a621aec4d"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: crNetworkManager.ts \u2194 wkInterceptableRequest.ts: \u0060packages/playwright-core/src/server/chromium/crNetworkManager.ts\u0060 and \u0060packages/playwright-core/src/server/webkit/wkInterceptableRequest.ts\u0060 change together 64% of the time (9 of the 14 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 9 shared commits counted here, the most recent 3 are \u006083df35ae\u0060 feat(har): use engine timestamps instead of server \u0060Date\u0060 (#41082); \u00601ac9a570\u0060 feat(har): include \u0060WebSocket\u0060 in \u0060.har\u0060 (#41015); \u006073f6cf9a\u0060 chore: normalize resource types (#38480) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crNetworkManager.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9796a54e8f7ae0f5a5b15a31c3156ae2d2257ffb26be15f6f419cb6c97f2d28"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: testServerConnection.ts \u2194 testServer.ts: \u0060packages/playwright/src/isomorphic/testServerConnection.ts\u0060 and \u0060packages/playwright/src/runner/testServer.ts\u0060 change together 64% of the time (14 of the 22 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 14 shared commits counted here, the most recent 3 are \u0060783b664f\u0060 chore: cleanup test root folder (#40100); \u0060a6fb4676\u0060 chore(testRunner): expose pauseAtEnd/pauseOnError (#37923); \u0060d669fcde\u0060 chore: step error recovery framework (#36996) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/isomorphic/testServerConnection.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cafae5b3a25629288e397fae83faff4e4c6a2419b61d9d9965bd410f45e167b0"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: traceModel.ts \u2194 traceModernizer.ts: \u0060packages/isomorphic/trace/traceModel.ts\u0060 and \u0060packages/isomorphic/trace/traceModernizer.ts\u0060 change together 63% of the time (12 of the 19 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 12 shared commits counted here, the most recent 3 are \u006087ca8496\u0060 chore(trace): use a single id for calls and test runner steps (#42430); \u00609642f576\u0060 feat(trace): attribute requests to service workers and api request co\u2026; \u00600d864018\u0060 feat(trace-viewer): webm-based film strip (#42319) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/traceModel.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7be452dc21008dc0b9c4eff8a7b2188cd0ae80d7834cc283092e22b514fa49b9"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: chromium.ts \u2194 browserTypeDispatcher.ts: \u0060packages/playwright-core/src/server/chromium/chromium.ts\u0060 and \u0060packages/playwright-core/src/server/dispatchers/browserTypeDispatcher.ts\u0060 change together 62% of the time (8 of the 13 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u00604afdd64a\u0060 chore(browserType): merge connectOverCDP and connectOverCDPTransport \u2026; \u00608f503225\u0060 feat(browserType): allow passing a ConnectionTransport to connectOver\u2026; \u00602085f53b\u0060 chore: remove unused _connectOverCDPTransport method (#40195) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/chromium.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"68c695bdff5336d7ebd8f67f8bfafb0eb24fc10a855d44b8c101fb73760c6f69"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: NetworkObserver.js \u2194 main.js: \u0060browser_patches/firefox/juggler/NetworkObserver.js\u0060 and \u0060browser_patches/firefox/juggler/content/main.js\u0060 change together 62% of the time (8 of the 13 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u0060bba16283\u0060 chore: roll browser patches from upstream (#39944); \u0060d0b1fc27\u0060 chore: roll browser patches (#38909); \u006001103405\u0060 chore: update browser patches to 09195c9 (#32877) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/NetworkObserver.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b06e92683eac43a0d8df82516f08499cbf43c34673d2273af387d8fc65e1d95e"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: navigate.ts \u2194 tab.ts: \u0060packages/playwright-core/src/tools/backend/navigate.ts\u0060 and \u0060packages/playwright-core/src/tools/backend/tab.ts\u0060 change together 60% of the time (6 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u00607563c5a6\u0060 fix(mcp): report a dialog opened during navigation instead of timing \u2026; \u0060273c8aab\u0060 feat(mcp): support python, java and csharp in --codegen (#42106); \u006087b2074d\u0060 fix(cli): tab-new navigates to url when provided (#39977) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/backend/navigate.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2f2a2bf8f3ab3337d24c53edca19c028eb53b1aaff67cfe94c3930fd3d2fe00"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: video.ts \u2194 screencast.ts: \u0060packages/playwright-core/src/client/video.ts\u0060 and \u0060packages/playwright-core/src/server/screencast.ts\u0060 change together 60% of the time (6 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u0060d0d1240e\u0060 feat(api): add annotate option for video and screencast (#39783); \u00609335d41a\u0060 feat(video): add screencast mode to Video.start for JPEG frame events\u2026; \u00602864540c\u0060 chore: follow up to video api changes (#39085) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/video.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ca95ecb79eadc4583ac8b77cb61c0fc64ce1bebb83a755a7de57da8c8d80779"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: FrameTree.js \u2194 Protocol.js: \u0060browser_patches/firefox/juggler/content/FrameTree.js\u0060 and \u0060browser_patches/firefox/juggler/protocol/Protocol.js\u0060 change together 55% of the time (6 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u0060d0b1fc27\u0060 chore: roll browser patches (#38909); \u006001103405\u0060 chore: update browser patches to 09195c9 (#32877); \u00603536e81d\u0060 chore: update browser patches as of May 26, 2023 (#23556) (#24079) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/content/FrameTree.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a60f7dc39c9697745a91a2a5f83630d2dca8ea1a1fc00cf1708d2aadf2592fc5"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: electron.ts \u2194 loader.ts: \u0060packages/playwright-core/src/server/electron/electron.ts\u0060 and \u0060packages/playwright-core/src/server/electron/loader.ts\u0060 change together 55% of the time (6 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u00605df6a4e9\u0060 Revert \u0022fix(electron): pass port via switches not args\u0022 (#39710); \u0060c86a0724\u0060 fix(electron): pass port via switches not args (#39012); \u0060ad6e4053\u0060 fix(electron): make sure user arguments go first (#29204) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/electron/electron.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"51894397b88103ed7a6b48ea51af55273451de558bdec5c8186adae143176112"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: networkFilters.tsx \u2194 tabbedPane.tsx: \u0060packages/trace-viewer/src/ui/networkFilters.tsx\u0060 and \u0060packages/web/src/components/tabbedPane.tsx\u0060 change together 55% of the time (6 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u0060c47f96a5\u0060 chore: revert bogus keyboard navigability attempts (#41432); \u00603d8f1e93\u0060 fix(trace-viewer): add keyboard navigation to \u0060NetworkFilters\u0060 compon\u2026; \u0060e25d5719\u0060 Revert \u0022fix(trace-viewer): add keyboard navigation to \u0060NetworkFilters\u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/networkFilters.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"501f95d4725ea9d425cd7af5b9589cedfba7d0c09494e1245c1125a99291786a"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: NetworkObserver.js \u2194 FrameTree.js: \u0060browser_patches/firefox/juggler/NetworkObserver.js\u0060 and \u0060browser_patches/firefox/juggler/content/FrameTree.js\u0060 change together 55% of the time (6 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u0060d0b1fc27\u0060 chore: roll browser patches (#38909); \u006001103405\u0060 chore: update browser patches to 09195c9 (#32877); \u0060aa1862cd\u0060 chore: update browser patches as of Aug, 1 2023 (#27005) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/NetworkObserver.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"739765f94a1d3ed191dbe010486a26ceae0cdf799e27c78f796cbda68e55f772"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: pdf.ts \u2194 response.ts: \u0060packages/playwright-core/src/tools/backend/pdf.ts\u0060 and \u0060packages/playwright-core/src/tools/backend/response.ts\u0060 change together 55% of the time (6 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u0060648a67c7\u0060 fix(mcp): create parent directories for explicitly named files (#42540); \u0060d620c45c\u0060 chore: revert file output to server-based (#39038) (at that commit the files were still \u0060packages/playwright/src/mcp/browser/tools/pdf.ts\u0060 and \u0060packages/playwright/src/mcp/browser/response.ts\u0060); \u00602307bf37\u0060 feat(mcp): add storage state tools (#39007) (at that commit the files were still \u0060packages/playwright/src/mcp/browser/tools/pdf.ts\u0060 and \u0060packages/playwright/src/mcp/browser/response.ts\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/backend/pdf.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b765e38c73693e8d49740b1fa2b480951b9737f57601ac8a942c478f648bafa"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: crPage.ts \u2194 wkPage.ts: \u0060packages/playwright-core/src/server/chromium/crPage.ts\u0060 and \u0060packages/playwright-core/src/server/webkit/wkPage.ts\u0060 change together 54% of the time (56 of the 104 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 56 shared commits counted here, the most recent 3 are \u0060974edd3f\u0060 feat(dialog): add dialogclosed event (#42014); \u0060bc97a130\u0060 fix(screencast): acknowledge frames after callbacks (#41898); \u00606949e055\u0060 feat: Add \u0060location()\u0060 to \u0060WebError\u0060 (#39767) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a563a469075a2ec50ab1e7fe6a9fbc9521692fac451a8ba7c756815fa3e99302"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: ffNetworkManager.ts \u2194 wkInterceptableRequest.ts: \u0060packages/playwright-core/src/server/firefox/ffNetworkManager.ts\u0060 and \u0060packages/playwright-core/src/server/webkit/wkInterceptableRequest.ts\u0060 change together 54% of the time (7 of the 13 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 7 shared commits counted here, the most recent 3 are \u00601ac9a570\u0060 feat(har): include \u0060WebSocket\u0060 in \u0060.har\u0060 (#41015); \u006073f6cf9a\u0060 chore: normalize resource types (#38480); \u00605271fe1f\u0060 chore: remove unused request param from route.continue (#32307) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/firefox/ffNetworkManager.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2ebf7c755429cb7d3a4a27186c31fa7be3b7efda4e8a4f67b447e3a07e26631"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: snapshot.ts \u2194 tab.ts: \u0060packages/playwright-core/src/tools/backend/snapshot.ts\u0060 and \u0060packages/playwright-core/src/tools/backend/tab.ts\u0060 change together 52% of the time (14 of the 27 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 14 shared commits counted here, the most recent 3 are \u0060273c8aab\u0060 feat(mcp): support python, java and csharp in --codegen (#42106); \u00601b18f3bf\u0060 feat(aria-snapshot): add boxes option to include bounding boxes (#40389); \u0060fb75e252\u0060 fix(cli): resolve refs for snapshot command (#40114) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/backend/snapshot.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b6c4b6469149db04a6e6e69a7918a28adfed1c4650eaee20ac03c930da4212b"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: testCaseView.tsx \u2194 testFileView.tsx: \u0060packages/html-reporter/src/testCaseView.tsx\u0060 and \u0060packages/html-reporter/src/testFileView.tsx\u0060 change together 50% of the time (15 of the 30 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 15 shared commits counted here, the most recent 3 are \u0060f00452c6\u0060 chore: deduplicate msToString and bytesToString into isomorphic/forma\u2026; \u00605d5b28f7\u0060 feat(html): show the list of runs from the same worker (#39103); \u0060d92591a9\u0060 fix(ui): dont mutate searchparams (#38275) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/testCaseView.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b8208e2eddcebe4b5a8a157ae3191057630e63db51fb7770628631abbaf3887"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: workerHost.ts \u2194 workerMain.ts: \u0060packages/playwright/src/runner/workerHost.ts\u0060 and \u0060packages/playwright/src/worker/workerMain.ts\u0060 change together 50% of the time (10 of the 20 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 10 shared commits counted here, the most recent 3 are \u006086b465c0\u0060 chore: merge agent cache from workers (#38500); \u006034a09f37\u0060 chore: remove mdb, replace by \u0060sendMessage\u0060 ipc into test worker (#38\u2026; \u0060d669fcde\u0060 chore: step error recovery framework (#36996) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/runner/workerHost.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31143b626f27a5518e9410f00439fa6d566744f9c4768fdea76561719043d5d"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: clock.ts \u2194 browserContextDispatcher.ts: \u0060packages/playwright-core/src/server/clock.ts\u0060 and \u0060packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts\u0060 change together 50% of the time (9 of the 18 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 9 shared commits counted here, the most recent 3 are \u0060ff6d41b3\u0060 chore: enforce dispatcher API convention for server types (4) (#40037); \u0060c2763fe7\u0060 feat: clock.uninstall (#36856); \u0060e4355f72\u0060 chore: migrate some dispatchers from CallMetadata to Progress (part 3\u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/clock.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ef6cb6f9bf0659874d8a61fe3d9ac0da0bc82573e1b4b340417f40439c7910e"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: filmStrip.tsx \u2194 workbench.tsx: \u0060packages/trace-viewer/src/ui/filmStrip.tsx\u0060 and \u0060packages/trace-viewer/src/ui/workbench.tsx\u0060 change together 50% of the time (8 of the 16 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u00600ee695b5\u0060 feat(trace-viewer): show screencast frames during playback (#42751); \u006051023b42\u0060 chore(trace-viewer): show only the screencast frame on timeline hover\u2026; \u0060ea3fab65\u0060 chore(trace): pass trace param to sha1 requests (#37788) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/filmStrip.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9ca8745baedf8d5273151848fd6e49970ee1dfdcd98b2ac1acb96794c33b20a"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: workbench.tsx \u2194 theme.ts: \u0060packages/trace-viewer/src/ui/workbench.tsx\u0060 and \u0060packages/web/src/theme.ts\u0060 change together 50% of the time (6 of the 12 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u0060888da0f8\u0060 chore(html): add html settings dialog (#37565); \u0060d7393f99\u0060 chore: simplify settings management in UI mode (#32440); \u0060a41cebc1\u0060 feat(ui mode): introduce Testing Options and Settings (#31841) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/workbench.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e328c463d4c2a9405b7462b01647af79ff084962efa01ee18a78e036b7b1cad"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: video.ts \u2194 pageDispatcher.ts: \u0060packages/playwright-core/src/client/video.ts\u0060 and \u0060packages/playwright-core/src/server/dispatchers/pageDispatcher.ts\u0060 change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u0060d0d1240e\u0060 feat(api): add annotate option for video and screencast (#39783); \u00609335d41a\u0060 feat(video): add screencast mode to Video.start for JPEG frame events\u2026; \u0060d039c403\u0060 chore: update video api and implementation (#39054) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/video.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"19827dec2c88c3456223c0bcdb8e3dc2bcf29da55ba487b449245807f54afa67"}},{"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":"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":"0752d0df7434000fcabf1048e2de30a7a1a8b982b3db9a19898c4dec199856b4"}},{"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":"d068c977b62d9a977df1bb6f53e8b00b586c3abee955f91d715f92b8e019d624"}},{"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":"4f1e7684f8281bd255ddef97105c7055c2ebae06964c8745716b83e174debe83"}},{"ruleId":"AC1","level":"warning","message":{"text":"\u003Cvideo\u003E without a captions track: Video with no captions \u003Ctrack\u003E offers no captions. This player\u0027s source is set at runtime, so there is no caption file to author here: give the player a way to carry captions \u2014 accept a track/captions URL alongside the media and render a \u003Ctrack kind=\u0022captions\u0022\u003E when one is supplied \u2014 and capture that asset wherever the media enters the product (upload, import or generation)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/recording.tsx"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfe33cab94ec48c56ac26eca37aa2de53e5df1d59fb12e3f02272eab2384b517"}},{"ruleId":"AC1","level":"error","message":{"text":"\u003Cimg\u003E without a text alternative: An image with no alt (and no aria-label/aria-labelledby) is unreadable to assistive tech. Add alt \u2014 alt=\u0022\u0022 if it\u0027s purely decorative."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/testResultView.tsx"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"2462c1187c81901fa2ca247ba5e79a54fba827560c22caf25e3fb242222c40c6"}},{"ruleId":"AC1","level":"error","message":{"text":"\u003Cimg\u003E without a text alternative: An image with no alt (and no aria-label/aria-labelledby) is unreadable to assistive tech. Add alt \u2014 alt=\u0022\u0022 if it\u0027s purely decorative."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/testResultView.tsx"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"803d5a8b3a172b0e519a51c60debb7711670d62c64c79e4314d730b10a48226f"}},{"ruleId":"AC1","level":"warning","message":{"text":"\u003Cvideo\u003E without a captions track: Video with no captions \u003Ctrack\u003E offers no captions. This player\u0027s source is set at runtime, so there is no caption file to author here: give the player a way to carry captions \u2014 accept a track/captions URL alongside the media and render a \u003Ctrack kind=\u0022captions\u0022\u003E when one is supplied \u2014 and capture that asset wherever the media enters the product (upload, import or generation)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/testResultView.tsx"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c08a79b6b0440863885248d8ea9390c9252381f862c5a11a2e178787f985d76"}},{"ruleId":"AC1","level":"error","message":{"text":"\u003Cimg\u003E without a text alternative: An image with no alt (and no aria-label/aria-labelledby) is unreadable to assistive tech. Add alt \u2014 alt=\u0022\u0022 if it\u0027s purely decorative."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/attachmentsTab.tsx"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab37a7662b17f8be4e9814cb2989671b58e0527d3e223cb55b77de2b00a6ac47"}},{"ruleId":"AC1","level":"error","message":{"text":"\u003Cimg\u003E without a text alternative: An image with no alt (and no aria-label/aria-labelledby) is unreadable to assistive tech. Add alt \u2014 alt=\u0022\u0022 if it\u0027s purely decorative."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/filmStrip.tsx"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c4ff10e7f6818b34bec8fa7750bd6855555c03c76fea89b45fd37f4aade560d"}},{"ruleId":"AC1","level":"error","message":{"text":"\u003Cimg\u003E without a text alternative: An image with no alt (and no aria-label/aria-labelledby) is unreadable to assistive tech. Add alt \u2014 alt=\u0022\u0022 if it\u0027s purely decorative."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/networkResourceDetails.tsx"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ab062183c291794302a90f9528d37fb728c28a35ebbac250fec4a558a8d5a42"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Ctextarea\u003E without a programmatic label: This control has only a placeholder \u2014 a placeholder is not a label (it vanishes on input and many AT ignore it). Add a \u003Clabel htmlFor\u003E, a wrapping \u003Clabel\u003E, or aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/annotateView.tsx"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"8988623e3ccfd72704408f5e5ab5867b2902ece60803afef33aac2b91e17ee8f"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Ctextarea\u003E without a programmatic label: This control has only a placeholder \u2014 a placeholder is not a label (it vanishes on input and many AT ignore it). Add a \u003Clabel htmlFor\u003E, a wrapping \u003Clabel\u003E, or aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/annotations.tsx"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"cde93eda5f770b1a903a0a574413188cdbfa56879879ba2cffc9f70e7512d6ce"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel for\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":811}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb6e4e3a5853ecde66d6485ae2fa392b36fcec098bfde7533039d014deba9782"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Ctextarea\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel for\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":811}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6a6976f4c6672ff7d45f83cd799876a33d042c5b2470db8b3c2a31af3f90f7b"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cselect\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel for\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":848}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c6b26636f53fce938b0d8fbc462b6c54b4fe47c26a12740cd1c681160e19d7d"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel for\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":923}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc667c9724f78b84d1a1c2017fe95766e43641c032761fc88d4e637dadf17cde"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Ctextarea\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel for\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":923}}}],"partialFingerprints":{"codehealthFindingId/v1":"17ffc180eac2d4bd8f6e92d1c28480db6af8b2c5d3a3ad1b5c3747c46533dda3"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel for\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1005}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4829e49dc8e976acd7f937f9cacd1f26928e95799cc8ede75cbaf50c8540d7c"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cinput\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel for\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":1360}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab8a63654a2c2fa62a167ca5191e08853e28fcf5576d08fea1470a747c01f0ff"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Ctextarea\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel for\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/frames.ts"},"region":{"startLine":1360}}}],"partialFingerprints":{"codehealthFindingId/v1":"41047ee746002c94772183b895ff24d05f5c6f2dc630c3b96533e88d1a17a71d"}},{"ruleId":"AC2","level":"error","message":{"text":"Custom control with no accessible name on \u003Cspan\u003E: This \u003Cspan\u003E carries a click handler, which makes it a control, but it has no text, aria-label or labelled child (the icon-only case), so assistive tech has no name to announce for it. Note that switching it to \u003Cbutton type=\u0022button\u0022\u003E \u2014 the right fix for its keyboard operability \u2014 does not give it a name either: an icon-only button still needs one. Add visible text or an aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/recorder/src/callLog.tsx"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ca54bb2eca1cfe710c921c4a6f489b92572c2144dada1b167a8be27a6cb3bb"}},{"ruleId":"AC2","level":"error","message":{"text":"Custom control with no accessible name on \u003Cdiv\u003E: This \u003Cdiv\u003E carries a click handler, which makes it a control, but it has no text, aria-label or labelled child (the icon-only case), so assistive tech has no name to announce for it. Note that switching it to \u003Cbutton type=\u0022button\u0022\u003E \u2014 the right fix for its keyboard operability \u2014 does not give it a name either: an icon-only button still needs one. Add visible text or an aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/codeMirrorWrapper.tsx"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"d752a5e528b90780282b4c6a5b8cb57807e50482374b3c28a74d7eea65073691"}},{"ruleId":"AC2","level":"error","message":{"text":"\u003Cselect\u003E without a programmatic label: This control has no associated label. Add a \u003Clabel htmlFor\u003E / wrapping \u003Clabel\u003E / aria-label / aria-labelledby so assistive tech can name it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/tabbedPane.tsx"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"80c45344eb0a2ef861509675da0978a07cd16fe05e1374c0d1a2b83b79cf882c"}},{"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/extension/src/ui/connect.html"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d91c02c9b0275cd3b9ea4a9de5a305e7810b023c256794010bc60265524717"}},{"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/html-reporter/index.html"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"92fa682d175cb4a627292086e23624214acbfa5f3574407467cb2213edfdd668"}},{"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/trace-viewer/index.html"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"54e1ff5065cf2a832f472eca6a6be1ec0fd5b0069bfd6a870d075fbba1667338"}},{"ruleId":"AC3","level":"error","message":{"text":"Document without a \u003Ctitle\u003E: A page with no \u003Ctitle\u003E gives no name in the tab, history or screen-reader page list. Add a descriptive \u003Ctitle\u003E in \u003Chead\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/snapshot.html"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"77fe149cb55e98ede858e642b751e320cbb25c39acae6cf9dc584c7cb2e8e0cf"}},{"ruleId":"AC3","level":"error","message":{"text":"\u003Ciframe\u003E without a title: An iframe with no title (or an empty one) is announced only as \u0022frame\u0022. Add a non-empty title describing its content, or an aria-label."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/snapshot.html"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"601dcf21c5ee24febffb6c9211f8b71e5e7b23383aecc2e24c9be8b599345e92"}},{"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/trace-viewer/src/ui/networkResourceDetails.tsx"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e031657fc7f0ea822002be7e126047189831d19cc8758037edd22cdef32cf64"}},{"ruleId":"AC4","level":"error","message":{"text":"Double-click handler on a non-interactive \u003Cdiv\u003E: This \u003Cdiv\u003E binds double-click and nothing else. No click, no key handler, and no tabIndex={0}, so it cannot even take focus. Nothing synthesises a double-click from the keyboard: Enter and Space fire a single click, and only on a native \u003Cbutton\u003E or \u003Ca href\u003E. So this behaviour has no keyboard path at all. Expose the same action on a real control, or add role \u002B tabIndex={0} \u002B a key handler alongside the double-click."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/annotations.tsx"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"a28f9b11f2a7c8d2367fc4512449086d9a068182771c53be122b7eb718a6f8f0"}},{"ruleId":"AC4","level":"error","message":{"text":"Clickable element isn\u0027t keyboard-operable: The repo\u0027s own CSS styles .annotations-rect with \u0060cursor: pointer\u0060, so this \u003Cdiv\u003E is a control \u2014 but it has no role, no tabIndex={0} and no key handler, so it can only be reached with a mouse. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/annotations.tsx"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e480009b3d3dae4c00b45ad535f4512dbb0ec9079874b9a7d88f7dc44e66e1d"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/settingsView.tsx"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"78e303b853f440abc543614a8ac946f5490e75222b5fe9a47b4ffc542b1ac5b1"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/extension/src/ui/tabItem.tsx"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"38ed9d160957f66b20899a5fc582a41c5af3afdf58b057cd3298a9e9d85d9a3f"}},{"ruleId":"AC4","level":"error","message":{"text":"Clickable element isn\u0027t keyboard-operable: The repo\u0027s own CSS styles .gantt-bar with \u0060cursor: pointer\u0060, so this \u003Crect\u003E is a control \u2014 but it has no role, no tabIndex={0} and no key handler, so it can only be reached with a mouse. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/gantt.tsx"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"25df9b2909736b7d9fd2a0af78d9e675bb33511b6eb758ced0d3b4e7b2280990"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cspan\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/labels.tsx"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"c54ca42ac78dadd73e531eb797548e5ed82079a6546ac5c515058e7e9497a3ce"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/treeItem.tsx"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"c46c0a19136fad8764024591ad1e21814f8842a4bae537f520073fe56bc74597"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cspan\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/recorder/src/callLog.tsx"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2cb47f72b467ff875ab9eccfe6ad4df8944506de7bcf296b2299ab69eecb41a"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cspan\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/tag.tsx"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"e52dd466155c7f38d3eedcaac02dd952a4f9d2cac3f78e4241faa9eed2c55407"}},{"ruleId":"AC4","level":"warning","message":{"text":"Link used as a button (placeholder href): An \u003Ca href=\u0022#\u0022\u003E (or javascript:) with a click handler is a button dressed as a link \u2014 it announces the wrong role and stops working without JS. Use a \u003Cbutton\u003E for an action."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/uiModeView.tsx"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"791d3b3b834ab44f63b44bc7fb4904655064d74b9906420e4c7d91f60e7de177"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/codeMirrorWrapper.tsx"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"51265be48e15807d4f50de82e592933a5a24b807265d663c5c64301ba4a00d16"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/gridView.tsx"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d9b15ec01ef2610b29f2f779850db6d484c3948b7d0bfadc3b888045d338548"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/toolbar.tsx"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8a048aee908bd96f90638cbcde8ee643cf2c35edfb88b13d0326e16e87e030a"}},{"ruleId":"AC4","level":"error","message":{"text":"Composite \u003Cdiv role=\u0022tree\u0022\u003E never reports its active option: This role=\u0022tree\u0022 is the tab stop for the whole widget (it carries the tabindex and the key handler), but nothing tells assistive tech which role=\u0022treeitem\u0022 is active: the container never sets aria-activedescendant, and no option is focusable, so DOM focus never moves off the container. The highlight a sighted user follows is invisible to a screen reader \u2014 arrowing through the widget announces nothing (WCAG 4.1.2). Either set aria-activedescendant on the container to the active option\u0027s id, or give the active role=\u0022treeitem\u0022 tabindex=\u00220\u0022 (the rest -1) and focus() it when the selection moves."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/treeView.tsx"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ffdf94b79a636f99e3e53d0415be81ea51f2a50c59105b9f10913c3b8bc773f"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element with no role and no tabindex: even where another element\u0027s key handler can reach it, assistive tech can neither focus it nor announce what it is. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0}."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/treeView.tsx"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"94de8cf14d8c5e20e94b82d00a223926acbd10f570ca90cf4338bc1c86be25bb"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cdiv\u003E: A click handler on a plain element with no role and no tabindex: even where another element\u0027s key handler can reach it, assistive tech can neither focus it nor announce what it is. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0}."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/treeView.tsx"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"e032ec75bb0cf8bfe96ccdf65afec1acbe5e595cccd290115dee0e08ee0d9667"}},{"ruleId":"AC4","level":"error","message":{"text":"Click handler on a non-interactive \u003Cimg\u003E: A click handler on a plain element isn\u0027t keyboard-operable. Use a \u003Cbutton\u003E, or add role \u002B tabIndex={0} \u002B a key handler."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/shared/imageDiffView.tsx"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ed5156bf3a7d6b294c3c6dbf26865c798e39a9f5400303f21f63ca747095d0a"}},{"ruleId":"AC6","level":"warning","message":{"text":"Low contrast colour pair in CSS (3.0:1): \u0060* you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an \u0022AS IS\u0022 BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ .tag\u0060 sets color: white on background-color: #8c959f \u2014 3.0:1, below the 4.5:1 WCAG AA minimum for normal text. Darken or lighten one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/tag.css"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7ee11fe8cf358e2c43a6e549542e7d51f1ceb70daeb27f3b8cf90308645d5b0"}},{"ruleId":"AC7","level":"warning","message":{"text":"Accessibility enforcement below the top rung: No accessibility enforcement found \u2014 no a11y linter (eslint-plugin-jsx-a11y) and no axe/pa11y/Lighthouse in tests or CI. Start with the linter to catch issues at author time. What was searched, so you can tell an absence from a miss: the 101 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":"P2","level":"note","message":{"text":"Logging is not universal: Only 3/9 runnable modules use logging (modules with no entry point or server are excluded \u2014 they are libraries a runnable module hosts). Silent: \u0060packages/playwright-chromium\u0060, \u0060packages/playwright-firefox\u0060, \u0060packages/playwright-test\u0060, \u0060packages/playwright-webkit\u0060, \u0060utils/doclint/linting-code-snippets/java\u0060 and 1 more."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"91a94e21d6d4d0e6a2003f94505b0b02b157176f0b24c4820f3f82b4447a97fe"}},{"ruleId":"P3","level":"note","message":{"text":"No SAST: No static application security testing detected. For this repository\u0027s stack, add CodeQL\u0027s javascript-typescript pack, \u0060semgrep --config=p/typescript\u0060, or eslint-plugin-security as a CI step. What was searched, so you can tell an absence from a miss: the 72451 CI workflow file(s) in this repository, and the scanner and linter configuration checked in beside them. A scan that runs outside CI, one configured in your forge\u0027s web UI rather than in a committed file, or a tool whose name is none of those this check carries, is not seen \u2014 if that is your case the row is wrong, and saying so is more useful than adding a second scanner."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6e54424179c892f03ef2fd003130ac4bd43f39bbf3b1ca0a0143e25acb80ec87"}},{"ruleId":"P6","level":"note","message":{"text":"No changelog: No CHANGELOG/HISTORY/RELEASES file \u2014 what shipped when isn\u0027t easy to reconstruct for support or audit. (Versioning/tagging makes releases traceable, but a changelog records the what.)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dda5aa5aed8cbb292c3ef2b733bc138f614293ae6426c85e98bf31ef330d9415"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060executablesOrSharedLibraries\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/registry/dependencies.ts"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff37909f3d645e7b665fe2a650d78a0113c787157e62bea636b874d5bd5f6254"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060listInstalledBrowsers\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/registry/index.ts"},"region":{"startLine":1181}}}],"partialFingerprints":{"codehealthFindingId/v1":"3907a3e88fe41b4d3154106039227a698f273db814c760011c1277a6df785afc"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060_installDriver\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/android/android.ts"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"c77cad798e62cfa3122fed062714886cb1a3e50dd3985a0551d14b670455488a"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060createProfile\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/third_party/firefoxPrefs.ts"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"24feffbd205e953f5876aff2c92a7a942f0f14fc2a64c69c64555bc40bec64a5"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060syncLocalStorageWithSettings\u0060 is async and calls mkdirSync, writeFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/launchApp.ts"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d831502c919381cc2208eeace0ce7889443fd8e03d46a16ae3e51ebb2c0a50a"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060zip\u0060 is async and calls statSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/localUtils.ts"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bb1cb2832417570810891785981bfee40b8264f99f497b81d50dd6f1c17b97a"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060listen\u0060 is async and calls unlinkSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/remote/playwrightPipeServer.ts"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"83020c9ba5aa43a2b700908deefdf7ce37ca1b768714245be9a2f853375d0399"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060startTraceViewerServer\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/viewer/traceViewer.ts"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"55ebb8a3b134c5204402aa38a3187992cbeffb59b45df29c0b79fac90142aaf4"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060openPage\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/cli/browserActions.ts"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"56adefb295ce6e2ce87a781edc83f01c0ab3ae60b7749664f3be5613ea25c295"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060launchBrowserServer\u0060 is async and calls readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/cli/driver.ts"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"175fd5a4c94474491687208ed0e2d015c176ab24370ef791c19e17162f787359"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060closeTrace\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/trace/traceUtils.ts"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"f99ff70480a4f0d1ae8bff7dd680fe77f77937420e682d8b8735c58680e36c62"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060openTrace\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/trace/traceUtils.ts"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"a335deb0d67c2afd4fda3fe753623b6cac944db98cdef1d89bb4812baed51668"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060loadTrace\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/trace/traceUtils.ts"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"65caf7583a32655409225120505b2f53eae4cacf683ca227f9d27ed4077e63e6"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060installSkills\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/utils/installSkills.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"59bca35aedf11ad28d7eb38d7f476123f0c69624ac92288a5a302e9ab8dc006c"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060startDaemon\u0060 is async and calls openSync, readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/session.ts"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d08cabb82c86642147aa4313e6ae6612377ab749d170ba721d15e45865b3650"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060resolveCLIConfigForCLI\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/mcp/config.ts"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7ee6c3088fbdc7552c9542f447dcd688d1b7587f8e5edc5000ff4f185b670ca"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060patchGitIgnore\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-daemon/program.ts"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"57479fad476ce9118bc46b14205a2aa779f828d51348b81fa3f30f87aeee20a5"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060ensureConfiguredBrowserInstalled\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-daemon/program.ts"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"f44e75ec89c6679876f7f41793fb44488bbcf6a68cb31e775e6b5d1b47b77bc0"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060syncLocalStorageWithSettings\u0060 is async and calls mkdirSync, writeFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/dashboard/dashboardApp.ts"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5d94540ac8144680c2a9f0979d7f0f41f237b6a532ca8140cfa4731e55a10a0"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060acquireSingleton\u0060 is async and calls unlinkSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/dashboard/dashboardApp.ts"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc18a7e82b7f6de5dff6418b6bc9b71f4c4a57826aba2bd775608bc6e8e44d32"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060killAllDaemons\u0060 is async and calls execSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/program.ts"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fd5b7575674f259477e9bfc1c5991ae1365f7c5b932a8aab47b3ec62b8d4a62"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060toHaveScreenshot\u0060 is async and calls existsSync, writeFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/matchers/toMatchSnapshot.ts"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"039245e138ad50dc9b135e978910e41e8947ab57c138fa2531737783e66df1a8"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060removeDirAndLogToConsole\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/util.ts"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9b23b4716e1a6ed34b3cc75991f4418fd1a9e76326a820bddc5be148c52346e"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060mergeTraceFiles\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/worker/testTracing.ts"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ad122217c21739c6adfde2e56708ed13013b79df859ad6761cc16c46dc7457e"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060collectFiles\u0060 is async and calls existsSync, statSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/runner/projectUtils.ts"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf57e7ec9d45d5ef43548bd6917e826c5cb3eec849d131a7706f93f1fa7e0eb3"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060detectChangedTestFiles\u0060 is async and calls execFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/runner/vcs.ts"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f861652f6f432d75772aa758bcfad050047e79b40a82d748547b5dd7c4c12d6"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060onEnd\u0060 is async and calls statSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/reporters/blob.ts"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"4517371fc22b4436094470078e14a82e7d9de457c7e6b7ffa443bd60142aad39"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060build\u0060 is async and calls mkdirSync, readdirSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/reporters/html.ts"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"aadf84be32cf0d8a9d5eec7589aff841d7812661ac58d10d9bb823e6fdb88c0a"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060_writeReportData\u0060 is async and calls appendFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/reporters/html.ts"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"c07e61bb03b3e78f2421e68ba0299241ed340bac9ad1aa206400d358627ecfa2"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060extractReportZip\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/reporters/html.ts"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"b82f99ed036831a01f380f9fcd5c6118e58e87b78d5a2e51e5ca0e7484a05884"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060init\u0060 is async and calls existsSync, readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/agents/generateAgents.ts"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"e06d6f07656a48470b968f5714a84dafb38e8b8d67d8837f6b31e689eabd10bc"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060appendToMCPJson\u0060 is async and calls readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/agents/generateAgents.ts"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"a326e6c0fe61a8af3a18b1facf3ea8614f47c04fbe64924d1986c48a5b829305"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060deleteFile\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/agents/generateAgents.ts"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e0755f59c05c159fa94d5039ffc10570c3409a7510f5671a5c1063def50bd8c"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060initRepo\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/agents/generateAgents.ts"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bfb616c123bc9c3f6a739831ef2aa34ece2039dceb323b95cd21e42f8cd214d"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060load\u0060 is async and calls readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/transform/esmLoader.ts"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7e0932b1431f967230d29ee6b5d1fb018f033744183f5c79e5e2be60748a9ee"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060launchProcess\u0060 is async and calls rmSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/processLauncher.ts"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"1599efa7a85c1a02501c3578db2c8230446edb2f1b0a51d51ed0db7f57d6cb0b"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060stopProfiling\u0060 is async and calls mkdirSync, writeFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/utils/profiler.ts"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"9708e249aa3e9da891ca132d52bd48feb2c43b65aa99d102feb0f1c172fa4a12"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060onEnd\u0060 is async and calls closeSync, mkdirSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/config/parquetReporter.ts"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"490daae3c5db8d60826a9deb13cbcac4da9b53051dafcac0f1740e091ffb54a8"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060postReportComment\u0060 is async and calls readFileSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/config/postReportComment.js"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"148e6e5caea96350b999b1db041e68a2d29ba5cfac7b58db389e84d0851e5fbc"}},{"ruleId":"PF3","level":"warning","message":{"text":"Sync-over-async blocking: \u0060start\u0060 is async and calls existsSync \u2014 a blocking call inside async code stalls the event loop \u2014 every other request waits for as long as it runs."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/config/remote-server-impl.js"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"263a18d7fb1dc958ca88f59d3671224c72023c9f193d9dd99936846ac10e6651"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 9 sibling directories (78 clone groups): 78 duplicated blocks under packages/playwright-core/src/server/ have copies in at least two of the sibling directories android, bidi, chromium, dispatchers, electron, firefox (\u002B3 more sibling(s) not listed) \u2014 62 of them are reported below, and 16 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 78 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 78 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 78 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/firefox/ffBrowser.ts"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd735a882ac1983d9ee7c6cd9675770a2d9699435f01147e00409346b29216f0"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 13 sibling directories (32 clone groups): 32 duplicated blocks under packages/ have copies in at least two of the sibling directories dashboard, extension, html-reporter, injected, isomorphic, playwright-browser-chromium (\u002B7 more sibling(s) not listed) \u2014 22 of them are reported below, and 10 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 32 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 32 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 32 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/utilityScriptSerializers.ts"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"04a340a37f51da775f2ad56d2225b6e9a3df2f3f28df4ff3c0b20052b1fdeb93"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 5 sibling directories (16 clone groups): 16 duplicated blocks under packages/playwright-core/src/ have copies in at least two of the sibling directories cli, client, remote, server, tools \u2014 9 of them are reported below, and 7 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 16 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 16 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 16 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/network.ts"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"98468269d6ded271fcadf2be133d1c082fc80b4d9c26e965e8a5cb6d34772763"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplication concentrated across 3 sibling directories (6 clone groups): 6 duplicated blocks under the repository root have copies in at least two of the sibling directories browser_patches, packages, utils \u2014 3 of them are reported below, and 3 are counted here but not reported individually: those copies match on shape but no longer clear R10\u0027s bar for an individually reported row \u2014 either they kept neither their own names nor their values, or what was copied is too small to stand on its own (it reports near-exact duplication only, and only of substantial extent). What this row states is the concentration, which the detector measured over all 6 and which does not depend on how exactly each block\u0027s copies still match. That concentration is one structural fact, not 6 local ones: the siblings replicate behaviour none of them owns, which is the shape of a missing shared module \u2014 a common library every sibling imports \u2014 rather than 6 separate extractions. Check first whether the siblings are deliberately standalone deliverables (scaffold templates, demo apps that must stay copy-pasteable); where they are, the duplication is the design and the per-block rows are the ones to act on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/NetworkObserver.js"},"region":{"startLine":832}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b654e38da6bdfa434ae0855a47c1b79eeb1b0ae5ce5ac16f3220a7079fe5b55"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (204 lines \u00D7 2 locations): packages/isomorphic/trace/versions/traceV7.ts:30 \u00B7 packages/isomorphic/trace/versions/traceV8.ts:171 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is a run of DECLARATIONS inside a construct \u2014 the members of a type, or the entries of an object or array literal \u2014 with no statement anywhere in it. Do not read this as an extract-a-helper row: nothing here executes, so there is no call site, and a call expression cannot stand where a member declaration or a literal\u0027s entry was. What repeats is a SHAPE, and which shape decides the move. Where the copies declare the same members, the repetition is a missing common ancestor: give it a base type, an interface both extend, a generic instantiated twice, or \u2014 where the copies are a literal\u0027s entries rather than a type\u0027s members \u2014 one shared constant each site spreads or refers to, so the set is written once. Where they declare DIFFERENT members and only the form is shared \u2014 a decorator and its options, an annotation, a registration table\u0027s keys \u2014 the form is prescribed by a framework or a schema rather than copied, and the only collapse available is to generate the declarations from that schema; where you do not own the generator, this is the cost of the framework and there is nothing to extract. Check which of the two it is before acting: these copies still drift apart the first time only one of them is edited, which is why the repetition is reported, but the sentence to act on is not the same in both cases."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV7.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"7da84bdb3622e29023a6d26e40fa4eac8a01ee7e3da726edd6a3a57bd0e6c2c8"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (172 lines \u00D7 2 locations): packages/isomorphic/trace/versions/traceV10.ts:21 \u00B7 packages/isomorphic/trace/versions/traceV9.ts:163 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is a run of DECLARATIONS inside a construct \u2014 the members of a type, or the entries of an object or array literal \u2014 with no statement anywhere in it. Do not read this as an extract-a-helper row: nothing here executes, so there is no call site, and a call expression cannot stand where a member declaration or a literal\u0027s entry was. What repeats is a SHAPE, and which shape decides the move. Where the copies declare the same members, the repetition is a missing common ancestor: give it a base type, an interface both extend, a generic instantiated twice, or \u2014 where the copies are a literal\u0027s entries rather than a type\u0027s members \u2014 one shared constant each site spreads or refers to, so the set is written once. Where they declare DIFFERENT members and only the form is shared \u2014 a decorator and its options, an annotation, a registration table\u0027s keys \u2014 the form is prescribed by a framework or a schema rather than copied, and the only collapse available is to generate the declarations from that schema; where you do not own the generator, this is the cost of the framework and there is nothing to extract. Check which of the two it is before acting: these copies still drift apart the first time only one of them is edited, which is why the repetition is reported, but the sentence to act on is not the same in both cases."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV10.ts"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1bbc44f2ca6daf5f8742864dfe06012f56236e219e799b2968d876f75824157"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (149 identical lines \u00D7 2 files): packages/isomorphic/trace/versions/traceV6.ts:17 \u00B7 packages/isomorphic/trace/versions/traceV7.ts:17 \u2014 these 2 files are line-for-line copies of one another \u2014 149 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV6.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"2287ab696293ef03d5664f4fbd828f3f085c59c21b386a74653c6cf7f5269e26"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (147 identical lines \u00D7 2 files): packages/isomorphic/trace/versions/traceV5.ts:18 \u00B7 packages/isomorphic/trace/versions/traceV6.ts:17 \u2014 these 2 files are line-for-line copies of one another \u2014 147 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV5.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"928fdee13bf3e2ae9abc058a937ffe02c6453d979b4f9740fd383c8e8f06a77d"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (139 identical lines \u00D7 2 files): packages/isomorphic/trace/versions/traceV5.ts:18 \u00B7 packages/isomorphic/trace/versions/traceV7.ts:17 \u2014 these 2 files are line-for-line copies of one another \u2014 139 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV5.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"aef23a4b0824098024b984d7601b019f5029bb65e0930f9fd2a95e3283404857"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (134 matched lines \u00D7 2 locations): packages/playwright-core/src/server/firefox/ffBrowser.ts:136 \u00B7 packages/playwright-core/src/server/webkit/wkBrowser.ts:128 \u2014 the two spans are one implementation copied and then locally edited \u2014 994 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/firefox/ffBrowser.ts"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"026e83e2b977041f710ddad885b4e174f865a50cb60e05038e4a5cc4f0700a3c"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (130 identical lines \u00D7 2 files): packages/isomorphic/trace/versions/traceV4.ts:17 \u00B7 packages/isomorphic/trace/versions/traceV5.ts:18 \u2014 these 2 files are line-for-line copies of one another \u2014 130 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV4.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa77f3443aee5ed3fda85da4f198484e68ef8e6a23d18e36d5cfa52865ea1965"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (129 identical lines \u00D7 2 files): packages/isomorphic/trace/versions/traceV4.ts:17 \u00B7 packages/isomorphic/trace/versions/traceV6.ts:17 \u2014 these 2 files are line-for-line copies of one another \u2014 129 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV4.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"a55ac9e6269b36b11f3c4fc5f0cd5b636c2c38fc4f5110171e57a9f45c20ef95"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (115 lines \u00D7 2 locations): packages/playwright-core/src/server/webkit/webview/wvPage.ts:1065 \u00B7 packages/playwright-core/src/server/webkit/wkPage.ts:1093 \u2014 the 2 copies are spread across 2 directories, so the shared home is a decision rather than an obvious spot: check first whether one of them already owns this behaviour, and otherwise put the extracted module somewhere all of the sites already reach rather than making one of them depend on another."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvPage.ts"},"region":{"startLine":1065}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a5de171fa37578e8af1ea128158deecfe469f83cf664d7651ee0b955a69739a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (112 lines \u00D7 2 locations): packages/isomorphic/trace/versions/traceV8.ts:35 \u00B7 packages/isomorphic/trace/versions/traceV9.ts:38 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is a run of DECLARATIONS inside a construct \u2014 the members of a type, or the entries of an object or array literal \u2014 with no statement anywhere in it. Do not read this as an extract-a-helper row: nothing here executes, so there is no call site, and a call expression cannot stand where a member declaration or a literal\u0027s entry was. What repeats is a SHAPE, and which shape decides the move. Where the copies declare the same members, the repetition is a missing common ancestor: give it a base type, an interface both extend, a generic instantiated twice, or \u2014 where the copies are a literal\u0027s entries rather than a type\u0027s members \u2014 one shared constant each site spreads or refers to, so the set is written once. Where they declare DIFFERENT members and only the form is shared \u2014 a decorator and its options, an annotation, a registration table\u0027s keys \u2014 the form is prescribed by a framework or a schema rather than copied, and the only collapse available is to generate the declarations from that schema; where you do not own the generator, this is the cost of the framework and there is nothing to extract. Check which of the two it is before acting: these copies still drift apart the first time only one of them is edited, which is why the repetition is reported, but the sentence to act on is not the same in both cases."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV8.ts"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"9379b953bbc283c6e48296bda6edda6a4d683ebe9734dc80e7f61fc2e66b26ea"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (105 identical lines \u00D7 2 files): packages/playwright-core/src/server/webkit/webview/wvInterceptableRequest.ts:18 \u00B7 packages/playwright-core/src/server/webkit/wkInterceptableRequest.ts:18 \u2014 these 2 files are line-for-line copies of one another \u2014 105 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvInterceptableRequest.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"6129e7aec9ca85d6c946c025cca810d8618084b1d57a09115d313e83b3067f39"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (98 matched lines \u00D7 2 locations): packages/playwright-core/src/client/browserContext.ts:179 \u00B7 packages/playwright-core/src/client/page.ts:178 \u2014 the two spans are one implementation copied and then locally edited \u2014 780 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/browserContext.ts"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"f36bc2c932af19d09544ee51e276e50f5033fccaaf952c11fbc181d016fcb33c"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (88 identical lines \u00D7 2 files): packages/playwright-core/src/server/webkit/webview/wvExecutionContext.ts:18 \u00B7 packages/playwright-core/src/server/webkit/wkExecutionContext.ts:18 \u2014 these 2 files are line-for-line copies of one another \u2014 88 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvExecutionContext.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"7875b9f1baa23aa82446c77b5724a2619ad735acd39c3333965c00d871dcf18f"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (87 identical lines \u00D7 2 files): packages/playwright-core/src/server/webkit/webview/wvConnection.ts:17 \u00B7 packages/playwright-core/src/server/webkit/wkConnection.ts:18 \u2014 these 2 files are line-for-line copies of one another \u2014 87 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvConnection.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"afc2808200d50dba70d9d360393ee17abef32f3466515441ffcf5db374ef2c31"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (81 lines \u00D7 2 locations): packages/playwright-core/src/tools/backend/webstorage.ts:26 \u00B7 packages/playwright-core/src/tools/backend/webstorage.ts:130 \u2014 all 2 copies are in the same file, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/backend/webstorage.ts"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"519ffa412ff598e6285dea58af998d1d111ca68a43fda7c91678c238a23ee4fb"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (69 lines \u00D7 3 locations): packages/isomorphic/trace/versions/traceV6.ts:162 \u00B7 packages/isomorphic/trace/versions/traceV7.ts:183 \u00B7 packages/isomorphic/trace/versions/traceV8.ts:324 \u2014 the 3 copies are spread across 3 files, and the CITED SPAN is a run of DECLARATIONS inside a construct \u2014 the members of a type, or the entries of an object or array literal \u2014 with no statement anywhere in it. Do not read this as an extract-a-helper row: nothing here executes, so there is no call site, and a call expression cannot stand where a member declaration or a literal\u0027s entry was. What repeats is a SHAPE, and which shape decides the move. Where the copies declare the same members, the repetition is a missing common ancestor: give it a base type, an interface both extend, a generic instantiated twice, or \u2014 where the copies are a literal\u0027s entries rather than a type\u0027s members \u2014 one shared constant each site spreads or refers to, so the set is written once. Where they declare DIFFERENT members and only the form is shared \u2014 a decorator and its options, an annotation, a registration table\u0027s keys \u2014 the form is prescribed by a framework or a schema rather than copied, and the only collapse available is to generate the declarations from that schema; where you do not own the generator, this is the cost of the framework and there is nothing to extract. Check which of the two it is before acting: these copies still drift apart the first time only one of them is edited, which is why the repetition is reported, but the sentence to act on is not the same in both cases."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV6.ts"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"d39b0197a8586e3f5f78f6409d48e043d008e54c0e805074a53efe57d12bc735"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (68 matched lines \u00D7 2 locations): packages/isomorphic/utilityScriptSerializers.ts:253 \u00B7 packages/protocol/src/serializers.ts:156 \u2014 the two spans are one implementation copied and then locally edited \u2014 621 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/utilityScriptSerializers.ts"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"522c46ea2a2e6efb1b3d568fae3881c1244b776480aa617cce806149c9b8671d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (64 lines \u00D7 3 locations): packages/isomorphic/trace/versions/traceV4.ts:19 \u00B7 packages/isomorphic/trace/versions/traceV5.ts:20 \u00B7 packages/isomorphic/trace/versions/traceV6.ts:19 \u2014 the 3 copies are spread across 3 files, and the CITED SPAN is a run of DECLARATIONS inside a construct \u2014 the members of a type, or the entries of an object or array literal \u2014 with no statement anywhere in it. Do not read this as an extract-a-helper row: nothing here executes, so there is no call site, and a call expression cannot stand where a member declaration or a literal\u0027s entry was. What repeats is a SHAPE, and which shape decides the move. Where the copies declare the same members, the repetition is a missing common ancestor: give it a base type, an interface both extend, a generic instantiated twice, or \u2014 where the copies are a literal\u0027s entries rather than a type\u0027s members \u2014 one shared constant each site spreads or refers to, so the set is written once. Where they declare DIFFERENT members and only the form is shared \u2014 a decorator and its options, an annotation, a registration table\u0027s keys \u2014 the form is prescribed by a framework or a schema rather than copied, and the only collapse available is to generate the declarations from that schema; where you do not own the generator, this is the cost of the framework and there is nothing to extract. Check which of the two it is before acting: these copies still drift apart the first time only one of them is edited, which is why the repetition is reported, but the sentence to act on is not the same in both cases."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV4.ts"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"04070ba59c764e00b4b8143ed163f493ec09e482c6be989dc7eef3af784bd3a5"}},{"ruleId":"R10","level":"warning","message":{"text":"Wholesale file copy (61 identical lines \u00D7 2 files): packages/playwright-core/src/server/webkit/webview/wvWorkers.ts:17 \u00B7 packages/playwright-core/src/server/webkit/wkWorkers.ts:17 \u2014 these 2 files are line-for-line copies of one another \u2014 61 lines are identical, in the same order, in every one of them \u2014 so this is one fact about the file set, not a block to extract. An edit made to one file and not the others changes behaviour silently, which is the failure a wholesale copy guarantees. Pick one file as the single source and derive the others from it (re-export it, spread it into the local overrides each variant genuinely needs, or generate the copies at build time) \u2014 the few lines that differ between the files are exactly the part each variant should still own. Check first whether the copies are deliberately standalone deliverables (a translation file seeded from its sibling and waiting to be translated); where they are, the duplication is the design, and the honest move is to mark the seeded file as untranslated rather than to let it pass as done."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvWorkers.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"52cce4d5a8a5e62d28b7af330a061c0b06d193cab92e98f7f46a6d39ef71d69d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (60 matched lines \u00D7 2 locations): utils/build_deps_true.js:31 \u00B7 utils/check_deps.js:25 \u2014 the two spans are one implementation copied and then locally edited \u2014 487 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/build_deps_true.js"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fa4842c1efab740e2d48c85840a48acb4b304766ed830f9fae4c1f834d5fb05"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (58 matched lines \u00D7 2 locations): packages/isomorphic/locatorGenerators.ts:566 \u00B7 packages/isomorphic/locatorGenerators.ts:672 \u2014 the two spans are one implementation copied and then locally edited \u2014 466 tokens are still identical, in the same order in both spans, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"83084a32c6fe5f6b569ee195264a102be1c66e13d28c352ae1a8410273861862"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (53 lines \u00D7 2 locations): packages/playwright-core/src/server/webkit/webview/wvPage.ts:553 \u00B7 packages/playwright-core/src/server/webkit/wkPage.ts:542 \u2014 the 2 copies are spread across 2 directories, so the shared home is a decision rather than an obvious spot: check first whether one of them already owns this behaviour, and otherwise put the extracted module somewhere all of the sites already reach rather than making one of them depend on another."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvPage.ts"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"12c247e0b0b7524acb6c3bf78bdb20a76f4d0c2be637b80d2ce5e02b3817a68f"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (51 matched lines \u00D7 2 locations): packages/playwright-core/src/server/chromium/crBrowser.ts:366 \u00B7 packages/playwright-core/src/server/webkit/wkBrowser.ts:240 \u2014 the two spans are one implementation copied and then locally edited \u2014 427 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crBrowser.ts"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9582711c0678821765f30e49452f055e0fda6fa0a5e4c67bf2da9625906bb52"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (45 matched lines \u00D7 2 locations): packages/playwright-core/src/server/chromium/crPage.ts:735 \u00B7 packages/playwright-core/src/server/firefox/ffPage.ts:210 \u2014 the two spans are one implementation copied and then locally edited \u2014 347 tokens are still identical, in the same order in both files, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crPage.ts"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"133ef1ff87e63bbf88a5100a4e2a6d1d5559b3a9087c058852085f6717b3b101"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (43 lines \u00D7 4 locations): packages/isomorphic/trace/versions/traceV5.ts:165 \u00B7 packages/isomorphic/trace/versions/traceV6.ts:171 \u00B7 packages/isomorphic/trace/versions/traceV7.ts:192 \u00B7 packages/isomorphic/trace/versions/traceV8.ts:333 \u2014 the 4 copies are spread across 4 files, and the CITED SPAN is a run of DECLARATIONS inside a construct \u2014 the members of a type, or the entries of an object or array literal \u2014 with no statement anywhere in it. Do not read this as an extract-a-helper row: nothing here executes, so there is no call site, and a call expression cannot stand where a member declaration or a literal\u0027s entry was. What repeats is a SHAPE, and which shape decides the move. Where the copies declare the same members, the repetition is a missing common ancestor: give it a base type, an interface both extend, a generic instantiated twice, or \u2014 where the copies are a literal\u0027s entries rather than a type\u0027s members \u2014 one shared constant each site spreads or refers to, so the set is written once. Where they declare DIFFERENT members and only the form is shared \u2014 a decorator and its options, an annotation, a registration table\u0027s keys \u2014 the form is prescribed by a framework or a schema rather than copied, and the only collapse available is to generate the declarations from that schema; where you do not own the generator, this is the cost of the framework and there is nothing to extract. Check which of the two it is before acting: these copies still drift apart the first time only one of them is edited, which is why the repetition is reported, but the sentence to act on is not the same in both cases."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV5.ts"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc59f084a5427f56d4eea09ae4977e7852d1e9da7665c1ea22d27af2e085c889"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (42 lines \u00D7 2 locations): packages/playwright-core/src/tools/cli-client/channelSessions.ts:88 \u00B7 packages/utils/chromiumChannels.ts:25 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is a run of DECLARATIONS inside a construct \u2014 the members of a type, or the entries of an object or array literal \u2014 with no statement anywhere in it. Do not read this as an extract-a-helper row: nothing here executes, so there is no call site, and a call expression cannot stand where a member declaration or a literal\u0027s entry was. What repeats is a SHAPE, and which shape decides the move. Where the copies declare the same members, the repetition is a missing common ancestor: give it a base type, an interface both extend, a generic instantiated twice, or \u2014 where the copies are a literal\u0027s entries rather than a type\u0027s members \u2014 one shared constant each site spreads or refers to, so the set is written once. Where they declare DIFFERENT members and only the form is shared \u2014 a decorator and its options, an annotation, a registration table\u0027s keys \u2014 the form is prescribed by a framework or a schema rather than copied, and the only collapse available is to generate the declarations from that schema; where you do not own the generator, this is the cost of the framework and there is nothing to extract. Check which of the two it is before acting: these copies still drift apart the first time only one of them is edited, which is why the repetition is reported, but the sentence to act on is not the same in both cases."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/channelSessions.ts"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4372baf15c089e9444aa3344b309a77330dc3d6e6c4a5fcd3e9f7646f49c2b8"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (40 lines \u00D7 2 locations): browser_patches/firefox/juggler/NetworkObserver.js:832 \u00B7 packages/playwright-core/src/server/network.ts:59 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/NetworkObserver.js"},"region":{"startLine":832}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff6bd04f4cdfd3b418e9db69b2606e8faa8fdd6232bf503c8b39a20d5a34f528"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (40 matched lines \u00D7 2 locations): browser_patches/firefox/juggler/protocol/Protocol.js:19 \u00B7 browser_patches/firefox/juggler/protocol/Protocol.js:87 \u2014 the two spans are one implementation copied and then locally edited \u2014 261 tokens are still identical, in the same order in both spans, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/Protocol.js"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc59f7c563eb892917db6707565efaaec7716d444e8e7673f53c1bb282abc38c"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (40 lines \u00D7 2 locations): packages/trace-viewer/src/ui/filmStrip.tsx:138 \u00B7 packages/trace-viewer/src/ui/filmStrip.tsx:189 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/filmStrip.tsx"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"a93dbab0f7f56c9f30f03fc7c4ffa7c01c90c9818ca6c779d8e57c75a0a3a3cd"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (39 lines \u00D7 2 locations): packages/playwright-core/src/server/webkit/webview/wvPage.ts:1217 \u00B7 packages/playwright-core/src/server/webkit/wkPage.ts:1301 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/webkit/webview/wvPage.ts"},"region":{"startLine":1217}}}],"partialFingerprints":{"codehealthFindingId/v1":"beede831af26284ec4531d57a2af7e89ac81450f475f8f35c75b7ed2b55c5993"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (37 lines \u00D7 2 locations): packages/playwright-core/src/server/bidi/bidiPdf.ts:31 \u00B7 packages/playwright-core/src/server/chromium/crPdf.ts:32 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiPdf.ts"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c90792fffdeee16b6fc5c5591396f9ee3bf784998303decc78dcaa7aebe362a"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2 locations): packages/playwright-core/src/client/browserContext.ts:420 \u00B7 packages/playwright-core/src/client/page.ts:589 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/browserContext.ts"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"37e35f83b90b7150b3e7b611870edabb08f865e159bd1a33a6fd5610dcf7d3f3"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 3 locations): packages/isomorphic/locatorGenerators.ts:352 \u00B7 packages/isomorphic/locatorGenerators.ts:459 \u00B7 packages/isomorphic/locatorGenerators.ts:677 \u2014 all 3 copies are in the same file, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3aa9ce03ca83b23cfb9eef8a06454b6d90cefabb1db5b010519860206bbb801"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2 locations): packages/playwright-core/src/server/firefox/ffPage.ts:504 \u00B7 packages/playwright-core/src/server/webkit/wkPage.ts:911 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/firefox/ffPage.ts"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0718045a190851e09f29c6dfa3bc39aeb76a2bd4fa20f0265b252f5de596b15"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2 locations): packages/injected/src/recorder/recorder.ts:609 \u00B7 packages/injected/src/recorder/recorder.ts:810 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/recorder/recorder.ts"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce8df9ce7f77f27269e8d280aa6bddd86cde17acb30c7a60db18f5f5d3b5d90e"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 4 locations): packages/isomorphic/locatorGenerators.ts:319 \u00B7 packages/isomorphic/locatorGenerators.ts:422 \u00B7 packages/isomorphic/locatorGenerators.ts:538 \u00B7 packages/isomorphic/locatorGenerators.ts:644 \u2014 all 4 copies are in the same file, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e7de36c4281b063f40640ed0fe680e119ceb1a4d64808a59b7c2f85805e4d13"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: packages/dashboard/src/annotationZip.ts:18 imports @zip.js/zip.js/lib/zip-no-worker-deflate.js, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/annotationZip.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"e77a93acd2ae86b11a8e5f53f3f3d30fb15862323de6377b69301cfe7a79aa55"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: packages/html-reporter/src/index.tsx:20 imports @zip.js/zip.js/lib/zip-no-worker-inflate.js, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/index.tsx"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a2891f1ce56612b8136578ea52d338d426c44118da2f08403e29f202e85043"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:relative-cross-package]: packages/playwright-client/src/index.ts:17 reaches into another package with a relative path (../../playwright-core/src/client/connection) \u2014 import the package by name instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/index.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"45d19ed4129b3528d7b5baab19945a2c5899bebd3bf77ca453175bac9a6b7cca"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: packages/playwright-core/src/server/bidi/bidiOverCdp.ts:17 imports chromium-bidi/lib/cjs/bidiMapper/BidiMapper, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiOverCdp.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"77e145480d7f9550680d27864bad0197883541c8d3600cff5761b88b15edaa64"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: packages/playwright-core/src/server/bidi/bidiOverCdp.ts:18 imports chromium-bidi/lib/cjs/cdp/CdpConnection, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/bidi/bidiOverCdp.ts"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"edc7247c0c9f01b4129727a2171ef0671f35ac004ca09163098815d361a1c4ec"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:third-party-deep-import]: packages/trace-viewer/src/sw/traceLoaderBackends.ts:17 imports @zip.js/zip.js/lib/zip-no-worker-inflate.js, reaching past a declared dependency\u0027s public entry into its build output \u2014 that path is the package\u0027s toolchain layout, not its API, and a minor version bump can relocate it with no semver signal. Import from the package\u0027s documented entry point instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/sw/traceLoaderBackends.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f48dd9b5454c8c198733a76bc2ce4026893493d15ccd15ddedf344811d4615e"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-cross-package-internals]: tests/extension/extension-fixtures.ts:148 reaches past another workspace package\u0027s public entry into its internals with a relative path (../../packages/playwright-core/lib/tools/cli-client/cli.js) \u2014 the test is coupled to a file layout that package makes no promise about, so a refactor behind its entry point breaks the suite. Import the package by name instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/extension/extension-fixtures.ts"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f365cf8ea2afaa738303760a41e63cdd5d5239c6f67ce4f08feec0e4b06172"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-cross-package-internals]: tests/mcp/annotate.spec.ts:506 reaches past another workspace package\u0027s public entry into its internals with a relative path (../../packages/playwright-core/lib/tools/cli-client/cli.js) \u2014 the test is coupled to a file layout that package makes no promise about, so a refactor behind its entry point breaks the suite. Import the package by name instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/annotate.spec.ts"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c4207e2504360528dcd6c2ffeec1b973f49ccefe6862795bc8e1cdc1c520520"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-cross-package-internals]: tests/mcp/cli-fixtures.ts:118 reaches past another workspace package\u0027s public entry into its internals with a relative path (../../packages/playwright-core/lib/tools/cli-client/cli.js) \u2014 the test is coupled to a file layout that package makes no promise about, so a refactor behind its entry point breaks the suite. Import the package by name instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/cli-fixtures.ts"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"18e662937a41097326696bbd44a19f8b29b5f99aa50d48891e1730b2f139614c"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-cross-package-internals]: tests/mcp/cli-fixtures.ts:137 reaches past another workspace package\u0027s public entry into its internals with a relative path (../../packages/playwright-core/lib/tools/cli-client/cli.js) \u2014 the test is coupled to a file layout that package makes no promise about, so a refactor behind its entry point breaks the suite. Import the package by name instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/cli-fixtures.ts"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"abb3c18d26da6017da156052924844199318b88b0b61c21a9f160d98300e16f1"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:test-cross-package-internals]: tests/mcp/fixtures.ts:302 reaches past another workspace package\u0027s public entry into its internals with a relative path (../../packages/playwright-core/lib/entry/mcp.js) \u2014 the test is coupled to a file layout that package makes no promise about, so a refactor behind its entry point breaks the suite. Import the package by name instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/mcp/fixtures.ts"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"adcd4341a30d6bb70e5ff65a0ae42ef649be0fc5459f4b63c7e56eebd44bf866"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:relative-cross-package]: utils/generate_cli_help.js:22 reaches into another package with a relative path (../packages/playwright-core/lib/coreBundle) \u2014 import the package by name instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_cli_help.js"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c48a7d602ae2cc3600f751c1b17db9991ae9828b1253e8f8458d0819b96fc10"}},{"ruleId":"R11","level":"warning","message":{"text":"Boundary violation [package:relative-cross-package]: utils/roll_browser.js:20 reaches into another package with a relative path (../packages/playwright-core/lib/coreBundle) \u2014 import the package by name instead."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/roll_browser.js"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddb9658ffadfe0721a13450ecbdca6e6cfba328cbc004c297e48cb8258939f6b"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function getTextAlternativeInternal (cyclomatic 137, cognitive 232): getTextAlternativeInternal has cyclomatic complexity 137 and cognitive complexity 232; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleUtils.ts"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae05a2e3f415eb5bbd54002bce78c5e6451d86a87721e8219013cb7a652066b9"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 92, cognitive 118): (anonymous) has cyclomatic complexity 92 and cognitive complexity 118; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/trace/recorder/snapshotterInjected.ts"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"70c1a5cea8b6ff8c86a9b8f323c04dd3c1b2405b538b0e093394e4bd4e0448a5"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function generateChannels (cyclomatic 81, cognitive 239): generateChannels has cyclomatic complexity 81 and cognitive complexity 239; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_channels.js"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"60d21c893226104996c4f355310112b25698c6bb61776f7beb7702216cb42858"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function validateConfig (cyclomatic 79, cognitive 96): validateConfig has cyclomatic complexity 79 and cognitive complexity 96; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/common/configLoader.ts"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2cd3af75099bf9650254a090018a9c92a62679b686fafca643cf5426de31773"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function program (cyclomatic 65, cognitive 79): program has cyclomatic complexity 65 and cognitive complexity 79; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/cli-client/program.ts"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"5476ed6e7a8c89cb9ee98f75df7ac7d8577a02614aa717d40bb63eb041e7045a"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function expectSingleElement (cyclomatic 58, cognitive 81): expectSingleElement has cyclomatic complexity 58 and cognitive complexity 81; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1518}}}],"partialFingerprints":{"codehealthFindingId/v1":"71d8b99e4eb6f65c08b19726ce3826dbacdeb64c1b745803c7d545ea9331be0c"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function ansi2html (cyclomatic 56, cognitive 21): ansi2html has cyclomatic complexity 56 and cognitive complexity 21; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/ansi2html.ts"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d9c4ff9b194485a3317951912d194f3d3837faa561a8db7ecbad1134f93172f"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function consumeAToken (cyclomatic 49, cognitive 75): consumeAToken has cyclomatic complexity 49 and cognitive complexity 75; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/cssTokenizer.ts"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fd4945fa8e5d99b4e56e2cc0c0a354c6d35dc703b28b34d6abd126998339eeb"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function innerAsLocators (cyclomatic 46, cognitive 113): innerAsLocators has cyclomatic complexity 46 and cognitive complexity 113; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e47b5e13dd2fc71c4bc8a307d1d2f12772f58366e3895e6c3ebcee9b7f1c72f"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function validateProject (cyclomatic 45, cognitive 57): validateProject has cyclomatic complexity 45 and cognitive complexity 57; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/common/configLoader.ts"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc5ec02732b85da156a6a0bcf0e36508130999b39d6d145e56adae936b8405f7"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function visit (cyclomatic 44, cognitive 72): visit has cyclomatic complexity 44 and cognitive complexity 72; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/snapshotRenderer.ts"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa77b66dbcbdce30727f96540f8f5142123e8d936e86aa9ac33e7c8e3a35f2fc"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function innerSerialize (cyclomatic 44, cognitive 62): innerSerialize has cyclomatic complexity 44 and cognitive complexity 62; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/utilityScriptSerializers.ts"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"051e5d4444e3aa3a4305736a1cdbb6e3d092e556a4c19a717784ec064e9e84d2"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function innerRenderMdNode (cyclomatic 44, cognitive 42): innerRenderMdNode has cyclomatic complexity 44 and cognitive complexity 42; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/markdown.js"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"d86662f4d2496d4da4552bf3a488c092fd8395ac4ff559253f6a1740fe1f586f"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function translateType (cyclomatic 42, cognitive 68): translateType has cyclomatic complexity 42 and cognitive complexity 68; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2e762eb18739d64ce76ca0dee1a3f39873046ca45fdeb38fbda37c74768a276"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function Dashboard (cyclomatic 40, cognitive 37): Dashboard has cyclomatic complexity 40 and cognitive complexity 37; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/dashboard.tsx"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"52eaa507d3129ddaa45660cdd52b2ce427c0ceb69d5e05e42f047c41de5412b5"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function generateLocator (cyclomatic 40, cognitive 25): generateLocator has cyclomatic complexity 40 and cognitive complexity 25; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"f52a5c9aae7592894dc142f693bf2844edad195970d110cd91a40283986ab3dc"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function (anonymous) (cyclomatic 39, cognitive 61): (anonymous) has cyclomatic complexity 39 and cognitive complexity 61; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/fetch.ts"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"552e7c1b51483c487f1fc381b351a32d071c78b2c47077da5627953392d15256"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function generateLocator (cyclomatic 39, cognitive 31): generateLocator has cyclomatic complexity 39 and cognitive complexity 31; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive sits below cyclomatic here, so much of the count is breadth \u2014 arms side by side rather than stacked \u2014 and splitting per arm would leave a function per arm; group the work between the checks into named steps instead. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/locatorGenerators.ts"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6a1e5c8d89b47a0f04212534d581fc941a287d38bcea0f95200d85311cce593"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function compressReports (cyclomatic 37, cognitive 109): compressReports has cyclomatic complexity 37 and cognitive complexity 109; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/flakiness-dashboard/processing/dashboard_compressed_v1.js"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"f64150c7b5391f7c14c6631adb0e12adea9c33fb91e9daf440a5e64561912425"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function _onRequest (cyclomatic 37, cognitive 41): _onRequest has cyclomatic complexity 37 and cognitive complexity 41; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/chromium/crNetworkManager.ts"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"866809300b94b91ae7041b1dd838660e9f636646339092ea8684a0b28bd5fc3b"}},{"ruleId":"R3","level":"warning","message":{"text":"Large Files: 92 file(s) over 400 lines (counted as significant lines \u2014 blank lines excluded \u2014 over production source only, tests excluded), largest first: packages/injected/src/injectedScript.ts (1743), packages/playwright-core/src/server/frames.ts (1715), packages/injected/src/recorder/recorder.ts (1609), packages/playwright/src/matchers/expectLibrary.ts (1499), packages/playwright-core/src/tools/cli-daemon/commands.ts (1308), packages/playwright-core/src/server/registry/index.ts (1295) (\u002B86 more)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"cecee31b569df4f07e06db732f1ca037af27b5afef9023da51f9673d931a142f"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: tests/config/proxy.ts:19 imports \u0027../third_party/proxy\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/config/proxy.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f08b0c472637cc7a5539ff7d8d6f8bac81ea52692b3a5877317142a64d794c"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: tests/library/browsercontext-har.spec.ts:20 imports \u0027../../packages/utils/third_party/extractZip\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/browsercontext-har.spec.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d868db89f03cf57857489b03e74f8ab359043844a229cfe78064e3b6520bbe28"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: tests/library/trace-viewer.spec.ts:22 imports \u0027../../packages/utils/third_party/extractZip\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/library/trace-viewer.spec.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"848c3d8784e016a7909efb57bd763ea1c0eaa4c79148e0a96ebf78038a7398d7"}},{"ruleId":"R4","level":"warning","message":{"text":"This test file cannot be loaded: tests/playwright-test/reporter-blob.spec.ts:21 imports \u0027../../packages/utils/third_party/extractZip\u0027, which names no file in this repository \u2014 and no rule in its .gitignore chain could cover one, so no build writes it either. The import throws as the runner collects this file, so none of its test cases run and nothing it was written to verify is verified. Restore the missing module or delete the test. It is excluded from the reachability measured above, because a file that cannot load reaches nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/playwright-test/reporter-blob.spec.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f218faeb2b48553f24d3590ec6ea5e7f28a6908039a953b0f34c1e4bdd674965"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/injectedScript.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce2f3c1ac86c80f304fcb76c141d9a6bb19990ffad0cd543e4acd99ff1aab6a1"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/recorder/recorder.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"73cadd99d5923a84d3cb485397fddc9a07313803e139beb383bde83efe1b3f5e"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/roleUtils.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6f36167db3af3ce00bdc8ac480ecc356a843cd59468ed0babc0d0bb5d4eb004"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/TargetRegistry.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7a7f787cb612a095e93dba199740b6e334edcad12cbf8ea3f2e734f39683557"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/NetworkObserver.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc6db2970eb01395f340053ef053df8af872f2765aabd9f68320ea781d3b8382"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/documentation.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"499c9b312bcfb7f3d497238fcbce8c6b7c3199e64a2f3c4f6b9a528308aae79e"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/Protocol.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"72f93e1ddfe6e25c2b5273112d96d9bff2a5e7339657a845fe08f3276d4f0224"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a73366f6d32882cc4bd78840423cd02ae93918b19d724bdbf5049991cdf906c"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/content/FrameTree.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3166876190b862cec9d7db1b84c556a77d300409606506b8f85875b69a7286a"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/protocol/PageHandler.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6942706d0ae616aeadf5f2d6034e0fb2c3b0c4ae3f750459795c406c29541e87"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_types/index.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"03ca6c410b67bfaf9a3684dfe50e3e51d9b9d348259418d056fe0a76f7886a0d"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/content/Runtime.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"832265ed0f8f730035f281e4ba35ea5b16af3c5fbaf9a8c0a0b7d120db3ba667"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorEvaluator.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae47c5d1da496224eb09a142dac69d7a488f5f8fb86fbbacf0603b01316e630b"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/content/PageAgent.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d390fd83bdadba9977a628b186d2555d8c7fcb316e49c7156b27634bd80378f0"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/networkResourceDetails.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dca03d4196c21335d0228522dda7d3f1ef325b03826c7631aeea35b134bafe8"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/uiModeView.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd84b410805b1d1a3c3816b763adab06b58e4f88c37d49194142c8aa2b9ecdb1"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/highlight.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"96af1b8ab91963410e4895bb9fbdd4ac6b495af8c005e96a5c26257dd3436711"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/selectorGenerator.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c271b3a7e526576e690514538c2676ce0a2b7238ffcf9f13d57345e82f22f77a"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/ariaSnapshot.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"336e1433806f8dc7151e1ba56949aa478efd256cf51ade52b4600e1c47a0f289"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/snapshotTab.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55779bcf6ec67c6e158a52b889215eb1fe942a4341c13d114f9a43f30afbb082"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/markdown.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"856754fb05744c8064dce1b89a7cee773075df2ce33c06002e6d3515a8d017ac"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/annotations.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c992dc91a2eeff6950e6b6d1da1fffb46d7d48192ad71702c51fabac301254e3"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/api_parser.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"411c7f25e3294d15ea52a12210671aebe5e2292640457186b2f69291537fe645"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_channels.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a90601511f7e78c803fe55ecfba475483fbe13490958c72cb877436c5859e4da"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/dashboardModel.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"baea65af801f07bfc7147d2ac76c823321390c1cefbb72e85a92e93770a7efa4"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/workbench.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcb3bd47bc81a0d56072d341324c134375ea4de07ea92a5ea778b0c909c3c421"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV9.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6ac4e0f732cec5412595ffdfb274e63a9bd6d020a30944c6d6afd8ccb6b50e5"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/dashboard.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"52d140a86f76c84b77615c8f3bd87eb3e485632cbc15c81d0dfeaaabd031ba9e"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/webview/webViewInput.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5911c06b4e70725d0f25b9bf43f3cbea0c68f35d866db404f124a5d9d95ae73e"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/isomorphic/trace/versions/traceV8.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5fc15d70a6a9a5b4f68f14ff06dc64d1c4752d3fb01162ec45242f207d70610"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/web/src/components/treeView.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db12cd995249ce461faf06f5590f5ddb2adbf4a3aa488ce21397bbfbd0e7b2d3"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/injected/src/webSocketMock.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"584449e6d2eb60d8e42e4654c3682b8682d1967268aa7dc057398e06199655cb"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/networkTab.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"030c61a96145b7ca3489b4b2a3d9080708ed4168c4186b3e5c1b553d9eb77368"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/linting-code-snippets/cli.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd5ef264a742c4ffc11a2432d0e0b96e91334ab0011b5982834a21e5b9a8b1d3"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/testResultView.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a3a71667081aa9079d45f6e1a01da92e30f616e88d40315b48e1661bec0873b"}},{"ruleId":"R4","level":"warning","message":{"text":"No test reaches this file: No test imports this module directly or transitively. Import reachability cannot see a test that executes a file by path instead of importing it, nor one that drives it through a running browser by navigating to a URL \u2014 if neither does, no test reaches this one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/extension/src/relayConnection.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc22323800781419c5fd3536ad115318c7437c23c2c66a72b81f0e3ccf19b2a8"}},{"ruleId":"R6","level":"warning","message":{"text":"The declared test suite includes a file that cannot be loaded: This repository declares test tooling, and the \u2713 above records that declaration \u2014 but tests/config/proxy.ts and 3 other test file(s) in this workspace cannot be loaded at all: it imports a module that names no file in this repository, so the runner throws while collecting it and none of its cases execute. The wiring is present and the suite it points at does not run as written, which is why the tooling tick must not be read as a statement that the tests pass. Fix the unloadable file(s) \u2014 each one is reported with its failing import under Test Coverage \u2014 then the declared script exercises what it claims to."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/config/proxy.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"440cbb062e7dd7cdf084b92f365b45382168906d0d26203ea9f7f64d53a13f1d"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~1346 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/TargetRegistry.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0450a5aebf4cdd7e64e3cacfa5a51ed4e101064763e5a7fa11b80e0934fe12a"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~1103 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/NetworkObserver.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"482f647b2df16c62610d94c7b07d1b500021f1d677b62ddcf6caa1552c4fff56"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~890 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateDotnetApi.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"26a14eb02b7392a649aac1cec86ec8da701cabd5d936ea48578469a00b90a3be"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~656 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_types/index.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"317d7b5178b963403234a37f09fdcd51b146f17a995fc0228bfe60fdab3e0188"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~253 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/SimpleChannel.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"684afee742d107f0e60a94f5cab75f31cdfbffedcfadda10e469b7eed688eef5"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~234 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/Helper.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"780192b08475b3b081e9782af4e8608ed2eb82179f1c5af6c0c5c341bc50ff9c"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~170 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), but 2 in-repo import(s) from 2 other file(s) do name it (packages/html-reporter/src/testCaseView.story.tsx, packages/html-reporter/src/testFileView.story.tsx) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/sampleReport.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ed76f3e504b58aaa89e5112bda9b91fe9cefd06ebbd3832f16936ed100a3b46"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~170 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), but 2 in-repo import(s) from 2 other file(s) do name it (utils/generate_types/index.js, utils/render_release_notes.mjs) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/linkUtils.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c5994ed4c29b9773447015f23239bdb2b44cce7a04343b18a8f112b7015815d"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~169 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (utils/doclint/generateDotnetApi.js) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/dotnetXmlDocumentation.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9511bbda8880a9e778d0617e06defb8db58bf1cd89247a22815522260c6128b"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~161 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/components/Juggler.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d7b81d29937c7c237ddaca6e996e6b15ef576057a6b31ef2a2d84280e1d2e91"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~139 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), but 1 in-repo import(s) from 1 other file(s) do name it (utils/generate_types/index.js) \u2014 every one of those referrers is itself unreachable, so this file is dead only as a member of that cluster: if any referrer is in fact alive, this row falls with it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_types/parseOverrides.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e965a7cd921b913bae1cc1ced019a221e3053f2d46f8a952d160a656d555e66a"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~135 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/generateApiJson.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f8277d848069ba1862cfb656b0b0f61870da8cd41e8d53d5058f542288dd9a1"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~116 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/generate_chromium_default_font_families.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bbe04f1fd0129ee459e73020822366dd98a94ffa72d4a141d57ea2c07c07bf6"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~112 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/content/main.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ae01021a72b2f31b91d0faf1a3c1a870db4c269e73c5dc259bf2e702ab21738"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~99 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/juggler/ChannelEventSink.sys.mjs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3d5f0c9c487b078c236df137c7a219b7b59464e5e2ad402bb8e99225a3ccfb3"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~78 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/render_release_notes.mjs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bfd68f3b516cc9b7bc24182347ebf77d4d6ad6c5c8caf38d16a20f063e67a40"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~48 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/trace-viewer/src/ui/clickPointer.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c114919ad7814a527924a13a60add4d2a9ec04d04077d82c0b1c42bc3929ce69"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~38 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/chip.story.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"80280163de13b9001aa16e2657fedd57264fef95bf2e5a0f6a79751d81ba8d50"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~37 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/screencast.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"685299bad12cd8037635077339d7983ecdacb80b2d5b9d13bdfa034549001d9a"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~35 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/headerView.story.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31b8ab4e8a75002ac14046b5f9aeb0e598f0d4bc80a4b6b79d7ff42772bdc4e"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~33 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/testCaseView.story.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfbf5f9e2001f50d8bc28c84b61886edf03589891b0e3a5edd465950e619abbc"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~29 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/nodeStubs/path.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c94f41fa59b6a637488a59b690fd3dc5c1b723e85b02a9e202e45e2a9b6f79f2"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~27 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/nodeStubs/async_hooks.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8326cb4e101a8cf7b5323ecd2112ae2bdba9faaf34083316104562a69dc3b873"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~25 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/nodeStubs/fs.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05559506633e8d13b32cbda72c6aeeb72cb06a6f3ade50b0c337d754d42bdc4e"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~24 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/nodeStubs/crypto.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"23c90ed3c5e7c27bc33ed41a022e45360614ed8a01e329bb156a5f4374aabd63"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~24 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/nodeStubs/stream.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cc7988e64146557f2eb628507e50a944e8b16b3e49bbfdcf7610405a5c5de64"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~24 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/video_stress.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a320db65278749912167b920d32a61454526f2208a9122765fa47fb54e63f900"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~22 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/nodeStubs/processShim.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"da749a2305a5950edc9e2e356626b042f12164a35c6b706a0d06115cab55aab2"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~21 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/testFileView.story.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcc09e33bf612c442f532bcef5314378dda7b162eb16dbefd513fe7116c552e5"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~21 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/nodeStubs/colors.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"37c7a47976e062faaf740645c15078b2040afdbe224414b269ffa63cc43a6914"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~21 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/nodeStubs/events.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9feee5933be6ccfc1405baff0d66d33f4d04564efde0f5a56b644574471ca5c"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~21 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/nodeStubs/inspector.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"45a98d5d80604556f54036eb3aaa5c16a0d9d1adf3407e6f6ba98207aab5f175"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~21 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-client/src/nodeStubs/util.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a875aee4e0814957c0a48f3a82eedaffffb0fbce91fee4cc51729e5a2866beae"}},{"ruleId":"R7","level":"warning","message":{"text":"Dead file (~3 LoC): no import path from any entry point (269 application, 82 tooling, 811 test roots considered), and no other file in the scanned tree imports it \u2014 nothing in-repo names this module at all, which is the strongest form of this claim the import graph can make"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"browser_patches/firefox/preferences/00-playwright-prefs.js"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eb0922cfe86df7051daccd371a05a65317248853d56cca02381d460953a8200"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027CloseIcon\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/icons.tsx"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"a93bcffb03218d9ec95521df59c258fe5009259d3a9c087e565c9c478b5ced4b"}},{"ruleId":"R7","level":"note","message":{"text":"Unused export \u0027PlusIcon\u0027: Nothing imports this binding \u2014 it is safe to review for removal."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/dashboard/src/icons.tsx"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"16e76cfc33ef0b3d0c100dd35b30c335b3b1689250c5b64ea5d10ad1d6db035b"}},{"ruleId":"R8","level":"error","message":{"text":"Unlisted import \u0027lodash\u0027: Imported but not declared in any reachable package.json \u2014 installs work only by hoisting accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"utils/doclint/cli.js"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdb2fe1db2df19f53127c0c010316e3b1d10d30249895178921ea6270d2dc9e6"}},{"ruleId":"R8","level":"warning","message":{"text":"Unlisted import \u0027source-map\u0027: Imported only as a TYPE and declared in no reachable package.json. The import is erased at compile time, so nothing is installed and no runtime resolution depends on it \u2014 but type-checking a clean clone will fail. Declare the typings it resolves through (or the package itself) in the owning package.json."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright/src/runner/loadUtils.ts"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"89ea8c5323f57e15853e85acbaa9656d463b678b27961ae064335dbb9f230f77"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027@actions/github\u0027: Declared in the root package.json but never imported anywhere in that package or its workspace members \u2014 no static import reaches it. Usually that is dead weight and attack surface, but two shapes are indistinguishable from source and are NOT dead: an optional or native peer that another dependency loads dynamically at runtime, and a package a build, docs or test step installs and invokes separately. Confirm which of the three this is before removing it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"68ac1270ff9ff8bef87b6947afe708e83c4edf9af41afc698fdadea4795a247d"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027istanbul-lib-instrument\u0027: Declared in the root package.json but never imported anywhere in that package or its workspace members \u2014 no static import reaches it. Usually that is dead weight and attack surface, but two shapes are indistinguishable from source and are NOT dead: an optional or native peer that another dependency loads dynamically at runtime, and a package a build, docs or test step installs and invokes separately. Confirm which of the three this is before removing it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8c1e79337b1338caa68c1da1cd11d45a3b6ebb8493c1a5320e61f701254b019c"}},{"ruleId":"R8","level":"warning","message":{"text":"Unused dependency \u0027yaml\u0027: Declared in packages/web/package.json but never imported anywhere in that package or its workspace members \u2014 no static import reaches it. Usually that is dead weight and attack surface, but two shapes are indistinguishable from source and are NOT dead: an optional or native peer that another dependency loads dynamically at runtime, and a package a build, docs or test step installs and invokes separately. Confirm which of the three this is before removing it."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"937ac927df5e1a3866ddf27879ed3135673f1792a961a0bd4e8e5a81bab34d7f"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): packages/html-reporter/src/labels.tsx \u2192 packages/html-reporter/src/links.tsx \u2192 packages/html-reporter/src/labels.tsx"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/html-reporter/src/labels.tsx"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de8e1300f1a0e45963d5aa779e48521e1ffd7134b875a625feddcf9cb3e9df45"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (3 files): packages/playwright-core/src/cli/program.ts \u2192 packages/playwright-core/src/tools/cli-client/program.ts \u2192 packages/playwright-core/src/coreBundle.ts \u2192 packages/playwright-core/src/cli/program.ts (one verified cycle inside a mutually-dependent group of 4 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/cli/program.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ab004dcb71b070043a72ac5dff9fd5c3a5a82a2a69591a41a6ea0b444ebb2cc"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (3 files): packages/playwright-core/src/client/android.ts \u2192 packages/playwright-core/src/client/connect.ts \u2192 packages/playwright-core/src/client/connection.ts \u2192 packages/playwright-core/src/client/android.ts (one verified cycle inside a mutually-dependent group of 5 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/android.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bcc0ca2fa3bb2c7fa524f0a6de01261f3cdd2eaf1c1cd7667c9927d20eb579e"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): packages/playwright-core/src/client/browser.ts \u2192 packages/playwright-core/src/client/browserContext.ts \u2192 packages/playwright-core/src/client/browser.ts (one verified cycle inside a mutually-dependent group of 9 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/client/browser.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d06b06fd379aa5429f37d73d6829bcad2c971045b7e5c00f32015b305f0a29dc"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): packages/playwright-core/src/server/browserContext.ts \u2192 packages/playwright-core/src/server/debugger.ts \u2192 packages/playwright-core/src/server/browserContext.ts (one verified cycle inside a mutually-dependent group of 68 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/browserContext.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3020a77b696e28a06b0b526a2af022f850bb0e5a69c9d7a496b3f5a8a22c14e9"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): packages/playwright-core/src/server/registry/browserFetcher.ts \u2192 packages/playwright-core/src/server/registry/index.ts \u2192 packages/playwright-core/src/server/registry/browserFetcher.ts (one verified cycle inside a mutually-dependent group of 3 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/server/registry/browserFetcher.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"960eb52bf5b1a6a134506b8633b0e96b8197f98ad313718c2d523dc3257b1426"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): packages/playwright-core/src/tools/utils/mcp/http.ts \u2192 packages/playwright-core/src/tools/utils/mcp/server.ts \u2192 packages/playwright-core/src/tools/utils/mcp/http.ts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/playwright-core/src/tools/utils/mcp/http.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"221f91c40240ed7591f97e4ec41e3e16d578c7bb5b523bbb27cb68006d35ca63"}},{"ruleId":"SC1","level":"warning","message":{"text":"NuGet dependencies are not locked: No packages.lock.json and no central package management \u2014 restores aren\u0027t reproducible or pinned (SSDF PW.4.4). Enable \u003CRestorePackagesWithLockFile\u003Etrue\u003C/RestorePackagesWithLockFile\u003E (commit the lockfile) or adopt Directory.Packages.props. Advisory \u2014 never scored."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0a97b4f69ccac509400ece7eedefb06d3ede0522cd4d8bcb5c068bea719545a6"}}],"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-1104","guid":"4c918cb5-b2a6-6c55-9963-a44ee464305e","name":"CWE-1104","shortDescription":{"text":"CWE-1104"},"helpUri":"https://cwe.mitre.org/data/definitions/1104.html"},{"id":"CWE-125","guid":"98717707-96bf-ca5b-9568-8d1d257574c1","name":"CWE-125","shortDescription":{"text":"CWE-125"},"helpUri":"https://cwe.mitre.org/data/definitions/125.html"},{"id":"CWE-1352","guid":"5257f322-5cfc-6b52-bedd-0b9a526b4c7d","name":"CWE-1352","shortDescription":{"text":"CWE-1352"},"helpUri":"https://cwe.mitre.org/data/definitions/1352.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-22","guid":"b68d9ca7-bdde-d057-a6cc-9f8b1e739552","name":"CWE-22","shortDescription":{"text":"CWE-22"},"helpUri":"https://cwe.mitre.org/data/definitions/22.html"},{"id":"CWE-250","guid":"52ee12e8-390a-7351-b1e6-388afa694e54","name":"CWE-250","shortDescription":{"text":"CWE-250"},"helpUri":"https://cwe.mitre.org/data/definitions/250.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-319","guid":"7af97476-9f0d-4458-9163-3d2043918a1a","name":"CWE-319","shortDescription":{"text":"CWE-319"},"helpUri":"https://cwe.mitre.org/data/definitions/319.html"},{"id":"CWE-345","guid":"d80d4b65-bbbe-b65d-958e-7ac466af18f9","name":"CWE-345","shortDescription":{"text":"CWE-345"},"helpUri":"https://cwe.mitre.org/data/definitions/345.html"},{"id":"CWE-346","guid":"07c355cb-45b6-d05e-8a2c-9f686bc45618","name":"CWE-346","shortDescription":{"text":"CWE-346"},"helpUri":"https://cwe.mitre.org/data/definitions/346.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-457","guid":"b62874fe-6222-8b5b-8ade-9527ad1cbb4a","name":"CWE-457","shortDescription":{"text":"CWE-457"},"helpUri":"https://cwe.mitre.org/data/definitions/457.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-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"},{"id":"CWE-940","guid":"75819a47-7665-bd5a-8873-2eebffae7d6e","name":"CWE-940","shortDescription":{"text":"CWE-940"},"helpUri":"https://cwe.mitre.org/data/definitions/940.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":80,"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."]}]}