{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}},{"id":"D38","name":"OSV Dependency Vulnerabilities","shortDescription":{"text":"OSV Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D38","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"builder.create_pptx_with_native_svg (cyclomatic 223): builder.create_pptx_with_native_svg has cyclomatic complexity 223 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":4639}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a20c99c636a6734741b465300f5a9a1983274d0428981e113790edd99c334ac"}},{"ruleId":"D1","level":"warning","message":{"text":"cli.main (cyclomatic 191): cli.main has cyclomatic complexity 191 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"02c6d0040a65a129ef55b0f233de7371046ab687500ddc9038fda336b2cd4b4f"}},{"ruleId":"D1","level":"warning","message":{"text":"template_structure.parse_template_slide (cyclomatic 128): template_structure.parse_template_slide has cyclomatic complexity 128 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1303}}}],"partialFingerprints":{"codehealthFindingId/v1":"73442702e4e69e4fe4b8844b0fd2846dfda2063ae995f764fd9d0b3a7a1e9f0e"}},{"ruleId":"D1","level":"warning","message":{"text":"template_validation.validate_pptx_template_package (cyclomatic 107): template_validation.validate_pptx_template_package has cyclomatic complexity 107 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_validation.py"},"region":{"startLine":866}}}],"partialFingerprints":{"codehealthFindingId/v1":"a54c339aea9c8c8d5db0d50d3035f6e34d71e7faa678311ec9853a2ad05de2ab"}},{"ruleId":"D1","level":"warning","message":{"text":"template_structure.load_pptx_structure_lock (cyclomatic 101): template_structure.load_pptx_structure_lock has cyclomatic complexity 101 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c906d5c59df1c999f50b4fcf817929aeb6a251f80bc460834af1ac34d62748d"}},{"ruleId":"D1","level":"warning","message":{"text":"elements.convert_text (cyclomatic 93): elements.convert_text has cyclomatic complexity 93 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":2646}}}],"partialFingerprints":{"codehealthFindingId/v1":"9931c42d3a2bf157936f243d5374a680a9ac962f1bc6786747979fab4e581d50"}},{"ruleId":"D1","level":"warning","message":{"text":"pdf_to_md.extract_pdf_to_markdown (cyclomatic 79): pdf_to_md.extract_pdf_to_markdown has cyclomatic complexity 79 (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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":1331}}}],"partialFingerprints":{"codehealthFindingId/v1":"99bff5687d590a07ad73779b8038e355f8d228c37842f52d610f8cc93ac48dfd"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_planned_image_closure (cyclomatic 77): SVGQualityChecker._check_planned_image_closure has cyclomatic complexity 77 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":5642}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8d6a005f583a9be8e4004b5c7cd7275d2be0876f8b7d2e97bd96adced750d14"}},{"ruleId":"D1","level":"warning","message":{"text":"checker.check_plan (cyclomatic 69): checker.check_plan has cyclomatic complexity 69 (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":"skills/ppt-master/scripts/template_fill_pptx/checker.py"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"96c4c9d645cbb907dfd691f4ba5ddd1f5548758b481bc705499a0fb2ec522a36"}},{"ruleId":"D1","level":"warning","message":{"text":"manifest.build_manifest (cyclomatic 68): manifest.build_manifest has cyclomatic complexity 68 (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":"skills/ppt-master/scripts/template_import/manifest.py"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"69286d19a4b0c26dd81b5235450ed32ddad5cd4a167032cfbe725d91a8b48a9d"}},{"ruleId":"D1","level":"warning","message":{"text":"image_gen.load_manifest (cyclomatic 67): image_gen.load_manifest has cyclomatic complexity 67 (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":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aba25a08d495449cb5b555e99e93508f1e5501da06077afd5d85b663cd0e2af"}},{"ruleId":"D1","level":"warning","message":{"text":"ln_to_svg.resolve_stroke (cyclomatic 62): ln_to_svg.resolve_stroke has cyclomatic complexity 62 (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":"skills/ppt-master/scripts/pptx_to_svg/ln_to_svg.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbae91be78f1fc5c06843a41c5b2d667d6142f9f2019f5e5dca250a6cc36581d"}},{"ruleId":"D1","level":"warning","message":{"text":"checker._local_pptx_structure_errors (cyclomatic 62): checker._local_pptx_structure_errors has cyclomatic complexity 62 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a0a6d4323ca1f1349e974f7d304b0b6123d26e7e09a2faffc40f114d09e5af9"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_spec_lock_alignment (cyclomatic 61): SVGQualityChecker._check_spec_lock_alignment has cyclomatic complexity 61 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":4170}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fa9d1f61cd29227a6667a9ac1c1d619816a0130fa1b705eea552b090e3966ca"}},{"ruleId":"D1","level":"warning","message":{"text":"ProjectManager.import_sources (cyclomatic 58): ProjectManager.import_sources has cyclomatic complexity 58 (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":"skills/ppt-master/scripts/project_management/cli.py"},"region":{"startLine":739}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b6f6b1d60e99e814f8ff221be59d9f90150c71dfbd62cd39691d7dfa4bdfc5"}},{"ruleId":"D1","level":"warning","message":{"text":"converter.convert_g (cyclomatic 58): converter.convert_g has cyclomatic complexity 58 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6602c6ccd6370abbea23a81486e8c29d673eed465953e881766662eb8db3f3f"}},{"ruleId":"D1","level":"warning","message":{"text":"converter.convert_svg_to_slide_shapes (cyclomatic 57): converter.convert_svg_to_slide_shapes has cyclomatic complexity 57 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":1372}}}],"partialFingerprints":{"codehealthFindingId/v1":"c52460af40d2381af2059e6ed7a2080bf382947fe43e5869280c1cbc6bc36f66"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations.validate_slide_animation_structure (cyclomatic 56): pptx_animations.validate_slide_animation_structure has cyclomatic complexity 56 (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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":3033}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e0db84cc888b472310b01e65250a633c4fa6a2dff381352676274f4bbd4bcea"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._axis_config_from_xml (cyclomatic 56): chart_to_svg._axis_config_from_xml has cyclomatic complexity 56 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1071}}}],"partialFingerprints":{"codehealthFindingId/v1":"a16b9636f2eadd1a536cc57fd0efc685b8eea6def5af473e44e9b509e2be5d6a"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_delivery_check.audit_pptx_delivery (cyclomatic 50): pptx_delivery_check.audit_pptx_delivery has cyclomatic complexity 50 (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":"skills/ppt-master/scripts/pptx_delivery_check.py"},"region":{"startLine":720}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b900a62243423096ddce6fdf2537985def0d2f65453450fa6cce3992bcbe3d0"}},{"ruleId":"D1","level":"warning","message":{"text":"elements._parse_preset_geometry_metadata (cyclomatic 50): elements._parse_preset_geometry_metadata has cyclomatic complexity 50 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1d55fd224fb3cd25781d9166e6f70d89c3773ae6e45220e252bbf43b8b0aed3"}},{"ruleId":"D1","level":"warning","message":{"text":"table._build_native_table (cyclomatic 50): table._build_native_table has cyclomatic complexity 50 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py"},"region":{"startLine":867}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff793bca9855f55108b8e820e76b7b61ee7b3fe07bc52a4a75a10ab92c4f488f"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.project_filter_errors (cyclomatic 47): utils.project_filter_errors has cyclomatic complexity 47 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2648}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d275da98849ec11ae596341cb6a3c4acb90693fd6da17b42150e897390e6595"}},{"ruleId":"D1","level":"warning","message":{"text":"native_enhance_pptx_core.apply_project (cyclomatic 46): native_enhance_pptx_core.apply_project has cyclomatic complexity 46 (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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1833}}}],"partialFingerprints":{"codehealthFindingId/v1":"309795e5f2f9e244a8db00e4f77967b9ac590d68c7deaba9db26ff38f37f3225"}},{"ruleId":"D1","level":"warning","message":{"text":"preset_authoring._validate_expanded_authored_preset_group (cyclomatic 46): preset_authoring._validate_expanded_authored_preset_group has cyclomatic complexity 46 (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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8d51d4eec3100871989e81e674b018b59c9ef52fb168f17761ec31af3347644"}},{"ruleId":"D1","level":"warning","message":{"text":"template_structure.template_prototype_errors (cyclomatic 46): template_structure.template_prototype_errors 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":2951}}}],"partialFingerprints":{"codehealthFindingId/v1":"22afb2ffa0699d81127d604759637821377cff5345141e3489e491cee1dd15ab"}},{"ruleId":"D1","level":"warning","message":{"text":"project_specs._validate_section (cyclomatic 45): project_specs._validate_section has cyclomatic complexity 45 (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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ee0d82ccb4b59c09b8c17d18f0d22a8f3889433c9edf7dba95ccb8352ae4949"}},{"ruleId":"D1","level":"warning","message":{"text":"ppt_to_md.convert_presentation_to_markdown (cyclomatic 45): ppt_to_md.convert_presentation_to_markdown has cyclomatic complexity 45 (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":"skills/ppt-master/scripts/source_to_md/ppt_to_md.py"},"region":{"startLine":1006}}}],"partialFingerprints":{"codehealthFindingId/v1":"16021fd347b7569a0ee42aac83eb3d30bc081a6230c6b058fbb7df9f953e4d10"}},{"ruleId":"D1","level":"warning","message":{"text":"elements.parse_project_nested_svg_crop (cyclomatic 45): elements.parse_project_nested_svg_crop has cyclomatic complexity 45 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":4587}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c2cb240c12dcb7b886726c734905c628b610c4182dc4bbd0b43ba6f0367079e"}},{"ruleId":"D1","level":"warning","message":{"text":"image_search.main (cyclomatic 44): image_search.main has cyclomatic complexity 44 (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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":1934}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3f3f999c631790dd4d9714740aae2ffcc825b439b8fef98771da3d41b41dad9"}},{"ruleId":"D1","level":"warning","message":{"text":"prompt_audit.load_manifest (cyclomatic 44): prompt_audit.load_manifest has cyclomatic complexity 44 (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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"7939ca283bc3e8a92a96a7024003bd80be244eef228fe415abe54f930ae8ed25"}},{"ruleId":"D1","level":"warning","message":{"text":"notes_to_audio.main (cyclomatic 42): notes_to_audio.main has cyclomatic complexity 42 (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":"skills/ppt-master/scripts/notes_to_audio.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac9af204d0f0651681259d34ef91a2af2b06921610700757cd53d4bb0e425230"}},{"ruleId":"D1","level":"warning","message":{"text":"tbl_to_svg.convert_tbl (cyclomatic 42): tbl_to_svg.convert_tbl 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"6698ebad171f68de6d5973d6c4ebcacfbb7b45ad0e68cfeb5fba21981fd05a4d"}},{"ruleId":"D1","level":"warning","message":{"text":"prompt_audit.audit_registries (cyclomatic 42): prompt_audit.audit_registries 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1103}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f936f61643388537bf7458c43d5ae80fa748de37a51331abdb1c7cea68310c"}},{"ruleId":"D1","level":"warning","message":{"text":"builder._promote_common_chrome_shapes_to_masters (cyclomatic 42): builder._promote_common_chrome_shapes_to_masters 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":3006}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7b3f5788eaf7a9be83035241fdcfc2537f0aa02281def4eb0b8a3539c992b9f"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations.validate_generated_animation_xml (cyclomatic 41): pptx_animations.validate_generated_animation_xml has cyclomatic complexity 41 (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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":3299}}}],"partialFingerprints":{"codehealthFindingId/v1":"216e2ce956cf28172f29976d273de8ed62014e9d7ad33d6b230e5646dc7087cc"}},{"ruleId":"D1","level":"warning","message":{"text":"cli.main (cyclomatic 41): cli.main has cyclomatic complexity 41 (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":"skills/ppt-master/scripts/project_management/cli.py"},"region":{"startLine":1147}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd11aefb0c4f001bf1e76ecff3d75e4ae4bc690d6521fd73134281a352d7f5af"}},{"ruleId":"D1","level":"warning","message":{"text":"preset_authoring._validate_compact_authored_preset_group (cyclomatic 40): preset_authoring._validate_compact_authored_preset_group has cyclomatic complexity 40 (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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"430d1557181fe1e1ff6cea443244e655e25554c7e94263d976b3309c8627c4d3"}},{"ruleId":"D1","level":"warning","message":{"text":"template_structure.load_native_structure_contract (cyclomatic 40): template_structure.load_native_structure_contract has cyclomatic complexity 40 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1028}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2cf7360d20981e31eb8ce711ffd3e478cb5413cdd3c5cbe36e2cf6b9a48582a"}},{"ruleId":"D1","level":"warning","message":{"text":"narration_sync.rebuild_animations (cyclomatic 39): narration_sync.rebuild_animations has cyclomatic complexity 39 (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":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":956}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d91378241eb5f9b3853d988c5b813beeb9fabff234ac77c4b1f678d2f0f6f45"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations._read_effect_options (cyclomatic 39): pptx_animations._read_effect_options has cyclomatic complexity 39 (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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":2382}}}],"partialFingerprints":{"codehealthFindingId/v1":"32037f1f7e26e091c9f44e2f739c9a47bbb0608ecd6e5d84dde5f14d3e0db811"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_native_object_markers (cyclomatic 39): SVGQualityChecker._check_native_object_markers has cyclomatic complexity 39 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3489}}}],"partialFingerprints":{"codehealthFindingId/v1":"164410788100779f17bcb913f9d31904d9800c84431bb539dbad7ada6ecbbc0f"}},{"ruleId":"D1","level":"warning","message":{"text":"animation_config._animation_parameter_errors (cyclomatic 39): animation_config._animation_parameter_errors has cyclomatic complexity 39 (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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"0260e209413f7da3de57f0d5f55f9d76a3735459c52ed5fab043ba601a045c14"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.project_marker_errors (cyclomatic 39): utils.project_marker_errors has cyclomatic complexity 39 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1990}}}],"partialFingerprints":{"codehealthFindingId/v1":"da8f9d15c88bb7583625ddb4809f540e80c94e65b71e12cc2b29dc0a6ee02071"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations._load_native_animations (cyclomatic 38): pptx_animations._load_native_animations 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"4acf016441a4fa32ca29f3642f06b1618814efd567b81e1f6842dceaf75ab6b4"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.project_gradient_errors (cyclomatic 38): utils.project_gradient_errors 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2327}}}],"partialFingerprints":{"codehealthFindingId/v1":"38049d762a8fd464231f440323f53cbb9b752bf28aaac9abbb890d19ea9c685d"}},{"ruleId":"D1","level":"warning","message":{"text":"server._merge_confirmed_choices (cyclomatic 37): server._merge_confirmed_choices has cyclomatic complexity 37 (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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1214}}}],"partialFingerprints":{"codehealthFindingId/v1":"288379e260f9b03785ca68024fe9d7b7fd7fe7707ef392c8ba411f7f52fcc42e"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._validate_chart_semantics (cyclomatic 37): chart_to_svg._validate_chart_semantics 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1597}}}],"partialFingerprints":{"codehealthFindingId/v1":"558f09adb46685f2a637c86ac3328187c4d6e62b595e5d92b603cbc4d71e5659"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker.check_directory (cyclomatic 37): SVGQualityChecker.check_directory 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":4700}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef8f5f99132fb3967a4402ae4032d96b4b1fa5ddf4c7dbdce954119ff8916606"}},{"ruleId":"D1","level":"warning","message":{"text":"builder._build_sequence_targets (cyclomatic 37): builder._build_sequence_targets 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":4126}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc8cf11a13ba2cfae36483417d8bb5848251be215f9a5c8e08347d83db75761b"}},{"ruleId":"D1","level":"warning","message":{"text":"normalized_chart_svg._render_xy (cyclomatic 36): normalized_chart_svg._render_xy has cyclomatic complexity 36 (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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9662d3a38c2f701f58a1c19300edee1b1ecff078e1fa9a556d174658b5e141a"}},{"ruleId":"D1","level":"warning","message":{"text":"doc_to_md._omml_to_latex (cyclomatic 36): doc_to_md._omml_to_latex has cyclomatic complexity 36 (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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9f0ba2487461ba623bbb79e2122e40c1ba78ff4eec8597eb2414239bbdc2ab4"}},{"ruleId":"D1","level":"warning","message":{"text":"styles.build_pattern_fill (cyclomatic 36): styles.build_pattern_fill has cyclomatic complexity 36 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/styles.py"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"35c64739c037f22c134de68d67ea7e1b2df40191962a8753d83dc145179ee1ce"}},{"ruleId":"D1","level":"warning","message":{"text":"tbl_to_svg._direct_border_payload (cyclomatic 35): tbl_to_svg._direct_border_payload has cyclomatic complexity 35 (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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":783}}}],"partialFingerprints":{"codehealthFindingId/v1":"723e88282191b985b7cfe17069f01c60462662cae089499b183278d56a577c13"}},{"ruleId":"D1","level":"warning","message":{"text":"tbl_to_svg._text_body_has_unsupported_formatting (cyclomatic 35): tbl_to_svg._text_body_has_unsupported_formatting has cyclomatic complexity 35 (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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":951}}}],"partialFingerprints":{"codehealthFindingId/v1":"822e9a0ed7d93467a5d3496a8d5de75521782dafd879f5d668e132b3ac4506a2"}},{"ruleId":"D1","level":"warning","message":{"text":"flatten_tspan._classify_paragraph_block (cyclomatic 35): flatten_tspan._classify_paragraph_block has cyclomatic complexity 35 (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":"skills/ppt-master/scripts/svg_finalize/flatten_tspan.py"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"f496ef9825a91450363fb851a61ec5fabb460ba7f1613c29a3299a852a968e13"}},{"ruleId":"D1","level":"warning","message":{"text":"semantic_markers.validate_semantic_markers (cyclomatic 35): semantic_markers.validate_semantic_markers has cyclomatic complexity 35 (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":"skills/ppt-master/scripts/svg_to_pptx/semantic_markers.py"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab7c77ff330e3e1102dcfd7ff3e0ad5bd27f77cb81cbb18085e00858ecfc99f6"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._validate_stock_semantics (cyclomatic 34): chart_to_svg._validate_stock_semantics has cyclomatic complexity 34 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0f85c46ca00fb5cf5cf8050b51bc74f57c6b281a4480599d677564dd98d2aa7"}},{"ruleId":"D1","level":"warning","message":{"text":"project_specs.validate_markdown_schema (cyclomatic 34): project_specs.validate_markdown_schema has cyclomatic complexity 34 (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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":1094}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb59689ca995b1aa5944e5de6e93aee352a878a913db961c3764fb839e7dcecc"}},{"ruleId":"D1","level":"warning","message":{"text":"register_template._validate_brand_spec (cyclomatic 34): register_template._validate_brand_spec has cyclomatic complexity 34 (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":"skills/ppt-master/scripts/register_template.py"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dba6c2b4f46c402be52ebf7ac75a3601c4e662eb6431af16aecece7863f8330"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_image_references (cyclomatic 34): SVGQualityChecker._check_image_references has cyclomatic complexity 34 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2702}}}],"partialFingerprints":{"codehealthFindingId/v1":"febf0fb3a3caf00ad2263234cc8250793ae54c6a544a914aa52bdd9f905fc344"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_pptx_structure_contract (cyclomatic 34): SVGQualityChecker._check_pptx_structure_contract has cyclomatic complexity 34 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":4879}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b44bb108720ae4d82efb9a91471c3f16f107d537dd7101d681b402c55d58e08"}},{"ruleId":"D1","level":"warning","message":{"text":"animation_config.validate_animation_config (cyclomatic 34): animation_config.validate_animation_config has cyclomatic complexity 34 (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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":1255}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a7781d9b5e081510707b41e9dd9d90fde0de6f5b84979e97261820827ac8617"}},{"ruleId":"D1","level":"warning","message":{"text":"language_tags.normalize_language_tag (cyclomatic 33): language_tags.normalize_language_tag has cyclomatic complexity 33 (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":"skills/ppt-master/scripts/language_tags.py"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dcab5ce35da41f9e76946cc65682f4fe394a7fdbcb18bb39c006f4a3087c828"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._data_label_text_style (cyclomatic 33): chart_to_svg._data_label_text_style has cyclomatic complexity 33 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1973}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6915897da02fea3f1423355cb2a1c439aa33e356d50b65ffdb7e018676699a4"}},{"ruleId":"D1","level":"warning","message":{"text":"align_embed_images._process_one_image (cyclomatic 33): align_embed_images._process_one_image has cyclomatic complexity 33 (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":"skills/ppt-master/scripts/svg_finalize/align_embed_images.py"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ee4ff93d09715d77f1d2c52218b360d81330337dcdbdbf5386ba094efd5e989"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_template_contract (cyclomatic 33): SVGQualityChecker._check_template_contract 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6226}}}],"partialFingerprints":{"codehealthFindingId/v1":"49efb46fb942fac26454f8b969df1b8817c0d302fb4c34a1e2b2ecdf123e1e9f"}},{"ruleId":"D1","level":"warning","message":{"text":"builder._promote_common_chrome_shapes_to_layouts (cyclomatic 33): builder._promote_common_chrome_shapes_to_layouts 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1423}}}],"partialFingerprints":{"codehealthFindingId/v1":"c640d4a5f97dbd182e3cfe46904818dac38606d8a8141a5aa4392a631a880adf"}},{"ruleId":"D1","level":"warning","message":{"text":"mirror_template_materialize.materialize_mirror_template (cyclomatic 32): mirror_template_materialize.materialize_mirror_template has cyclomatic complexity 32 (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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":2609}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7171f8edddc13454081f31e12a74f426e9bcb74f2a4eded878ce1915771cf9c"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._combo_payload (cyclomatic 32): chart_to_svg._combo_payload has cyclomatic complexity 32 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"5da311aa3c9715b80d1d813be025fc12c30f64a3aca58b88a439bc486dfc289a"}},{"ruleId":"D1","level":"warning","message":{"text":"register_template._validate_svg_template_spec (cyclomatic 32): register_template._validate_svg_template_spec has cyclomatic complexity 32 (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":"skills/ppt-master/scripts/register_template.py"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"50e4d2b52039531fc9eac1e6252403e31c23adf625575c58ab18a2fe7c62fe59"}},{"ruleId":"D1","level":"warning","message":{"text":"crop_images.process_svg_images (cyclomatic 32): crop_images.process_svg_images has cyclomatic complexity 32 (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":"skills/ppt-master/scripts/svg_finalize/crop_images.py"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b9cb02c1a00a33ca4d05927ef3883f1b219862b4240dd23376b545ef00fdd09"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_position_calculator.interactive_mode (cyclomatic 32): svg_position_calculator.interactive_mode has cyclomatic complexity 32 (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":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":1090}}}],"partialFingerprints":{"codehealthFindingId/v1":"14c25f586298497d9170e387266a125cec3e11e0ce9e84d23a81c5aae593dae4"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_data._chart_axes (cyclomatic 32): chart_data._chart_axes has cyclomatic complexity 32 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1aab0cecaf1bd13badc7f89ff8d21abb4acfc2be3bc07a96b77ec9ee2fce268"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_data._combo_chart_data (cyclomatic 32): chart_data._combo_chart_data has cyclomatic complexity 32 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":872}}}],"partialFingerprints":{"codehealthFindingId/v1":"03bb254638354129f8e00c2783b8adf84763063749b2443f40d455f269aef7e1"}},{"ruleId":"D1","level":"warning","message":{"text":"finalize_svg._process_candidate_directory (cyclomatic 31): finalize_svg._process_candidate_directory 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":"skills/ppt-master/scripts/finalize_svg.py"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"b932b6cdd2bf7a33ea09c478411b5ed6fd96297860b837e4c4c4e18377c37a13"}},{"ruleId":"D1","level":"warning","message":{"text":"narration_sync._resolve_animation_groups (cyclomatic 31): narration_sync._resolve_animation_groups 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":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":717}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eeba06c787337c41f9c4795dcaa46dc95ff340fda54624f102dfcc4cd3d35a2"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._apply_chart_metadata (cyclomatic 31): chart_to_svg._apply_chart_metadata 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1738}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf17a0f408f80c482e8abac879f77ea05e584caef3845aebbb663ec4f00ffd5b"}},{"ruleId":"D1","level":"warning","message":{"text":"web_to_md.element_to_markdown (cyclomatic 31): web_to_md.element_to_markdown has cyclomatic complexity 31 (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":"skills/ppt-master/scripts/source_to_md/web_to_md.py"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a9e825b8de5bcd8134fb9b5c06b8f35ea14321e2c7adc24a1608837e7d414c9"}},{"ruleId":"D1","level":"warning","message":{"text":"server.main (cyclomatic 31): server.main 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":"skills/ppt-master/scripts/svg_editor/server.py"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"48fe6625299a5fcd9bedc47e8f9e2a45411d278bf04dd350425fffde720d5d99"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_xml._chart_plot_xml (cyclomatic 31): chart_xml._chart_plot_xml 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":970}}}],"partialFingerprints":{"codehealthFindingId/v1":"b110f0a59bb89750ee81d0b06069e92c5822eac2f9eb00a391d606748b32c1d6"}},{"ruleId":"D1","level":"warning","message":{"text":"marker_status.native_marker_status_errors (cyclomatic 31): marker_status.native_marker_status_errors has cyclomatic complexity 31 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_status.py"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c04dfaf6cfe923620bc00afb3b99ed8b16d5c8fa27a8ebb0ee6ae6d223393fe"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._canonical_title_paragraph (cyclomatic 30): chart_to_svg._canonical_title_paragraph 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1846}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc0f48e95acbef5f8bc51c7e7d79636a3c5a04526dcb4c4eeec9b0dabfc190ca"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_transitions._validate_applied_motion (cyclomatic 30): pptx_transitions._validate_applied_motion 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":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":1841}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc47b759e45a58207991b922989c8772097821658f85270a7d64509a0cf72625"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_transitions.validate_pptx_morph_pairs (cyclomatic 30): pptx_transitions.validate_pptx_morph_pairs 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":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":2357}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fd98549075748d126b64cfbd1f6021265feec6390332f447d9122ae9fee1a60"}},{"ruleId":"D1","level":"warning","message":{"text":"flatten_tspan.flatten_text_with_tspans (cyclomatic 30): flatten_tspan.flatten_text_with_tspans 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":"skills/ppt-master/scripts/svg_finalize/flatten_tspan.py"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"cff3a4ff57b2a0b4c3f76373174f23af453bfb8b9a92e9e31e1c115f52decc56"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_preset_geometry_metadata (cyclomatic 30): SVGQualityChecker._check_preset_geometry_metadata 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2996}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31eaa2929f5bb7f6140d44cc50d4524e4326f0f670127d29a7f95b523a3b19b"}},{"ruleId":"D1","level":"warning","message":{"text":"checker._compact_preset_ancestor_paint (cyclomatic 30): checker._compact_preset_ancestor_paint 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"fba75140df7c6db342c60c9164897dcf274639b0aba0c2efc02e1022a6fd23c0"}},{"ruleId":"D1","level":"warning","message":{"text":"elements._clip_preset_geometry_error (cyclomatic 30): elements._clip_preset_geometry_error 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3229}}}],"partialFingerprints":{"codehealthFindingId/v1":"d594fff3014668088d2cfa456953ca796b204fe36a8a6aac4858a86532a74906"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.project_paint_reference_errors (cyclomatic 30): utils.project_paint_reference_errors 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2160}}}],"partialFingerprints":{"codehealthFindingId/v1":"d726a6da075541d4fade8996cfdd1d76654a33839c6830253c21b37de602bb04"}},{"ruleId":"D1","level":"warning","message":{"text":"image_gen.main (cyclomatic 29): image_gen.main 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":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":1108}}}],"partialFingerprints":{"codehealthFindingId/v1":"49d92e126fdd64fc00fc0f79fd4f9cfec59f215f1261e1562f12e63b239ca05b"}},{"ruleId":"D1","level":"warning","message":{"text":"image_search.promote_candidate (cyclomatic 29): image_search.promote_candidate 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"38a7f4f3b68c0f277a79ede9add709cc9b0dbebdf3275590d72751ecc20f3952"}},{"ruleId":"D1","level":"warning","message":{"text":"mirror_template_materialize._compose_template (cyclomatic 29): mirror_template_materialize._compose_template 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":2154}}}],"partialFingerprints":{"codehealthFindingId/v1":"26e634a31cb1be7e22856344e3849be95f6a0fde5dc17ad741688b36a239e988"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations.normalize_animation_effect_options (cyclomatic 29): pptx_animations.normalize_animation_effect_options 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ecacca2dc08668d69e511da9a18be213df57408e3f72a67519ea9ff66075a55"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._payload_from_chart_xml (cyclomatic 29): chart_to_svg._payload_from_chart_xml 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"32f82ad7127e08d3be6de695268a4628669809321c6966beffd41a0cbac692e8"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._effective_scatter_style (cyclomatic 29): chart_to_svg._effective_scatter_style 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1487}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d2767367ad38b04b462defd4ce1b92ef8bfef00a03bf5d540a402528e37cb2b"}},{"ruleId":"D1","level":"warning","message":{"text":"slide_to_svg._convert_shape (cyclomatic 29): slide_to_svg._convert_shape 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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b24911b270c13834cffdc2514c66296e6a1209ba021584276e1c6dd11859801"}},{"ruleId":"D1","level":"warning","message":{"text":"project_specs._validate_spec_lock_relations (cyclomatic 29): project_specs._validate_spec_lock_relations 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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":952}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bad0543b0d28f2102c9bc01429ef00442a49f0f45b05f37ad079b1b9fc047ba"}},{"ruleId":"D1","level":"warning","message":{"text":"cli.main (cyclomatic 29): cli.main 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":"skills/ppt-master/scripts/svg_quality/cli.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9fbed1b14518433042905e78940f9eaaa57a1d3a1bc30a44239cfec297c17b5"}},{"ruleId":"D1","level":"warning","message":{"text":"template_structure.template_prototype_lock_errors (cyclomatic 29): template_structure.template_prototype_lock_errors 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1990}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d71e7385c6d2fd4a1b010a2d4dd158333bb11a162309782c6d709f0f88ddcb9"}},{"ruleId":"D1","level":"warning","message":{"text":"tbl_to_svg._canonical_native_merge_status (cyclomatic 28): tbl_to_svg._canonical_native_merge_status 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9f3577528722423a10bb22fc26a4fe5d7475190bdc26c86f95cb7408f3da402"}},{"ruleId":"D1","level":"warning","message":{"text":"slice_images.slice_sheet (cyclomatic 28): slice_images.slice_sheet 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":"skills/ppt-master/scripts/slice_images.py"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"aae51508120ccd6a37356a65a46aefb4c8959d5243a1751f2e352550caa3ff6b"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_position_calculator.main (cyclomatic 28): svg_position_calculator.main 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":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":1296}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f69aef0051da7e8c0feecd4bf9860e31d0a6ae8052e44fd268410df6a2a1b2c"}},{"ruleId":"D1","level":"warning","message":{"text":"extract_svg_pictures._run (cyclomatic 27): extract_svg_pictures._run has cyclomatic complexity 27 (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":"skills/ppt-master/scripts/extract_svg_pictures.py"},"region":{"startLine":890}}}],"partialFingerprints":{"codehealthFindingId/v1":"5042e18eb8c1d84148a25179267faa9b698eccadd36c65fb74c61f60a16cadac"}},{"ruleId":"D1","level":"warning","message":{"text":"image_search.run_search_manifest (cyclomatic 27): image_search.run_search_manifest 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":1540}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c155c4c3bbfc5583ac7186418a9dcdfe557bd1fd55ac709c7184cee49f9f9d4"}},{"ruleId":"D1","level":"warning","message":{"text":"native_payloads._load_store (cyclomatic 27): native_payloads._load_store 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":"skills/ppt-master/scripts/native_payloads.py"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"43e7c45db5963b1c405542e0636fe5d71454357a5b903daced8ee10b41ab232d"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations._row_offset_ms (cyclomatic 27): pptx_animations._row_offset_ms 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":2716}}}],"partialFingerprints":{"codehealthFindingId/v1":"87efeb0627c21bfb5ab8945772f076dd694aef021c3ad7a1b6115bd6f1c892c6"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_delivery_check._motion_and_hidden_summary (cyclomatic 27): pptx_delivery_check._motion_and_hidden_summary 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":"skills/ppt-master/scripts/pptx_delivery_check.py"},"region":{"startLine":503}}}],"partialFingerprints":{"codehealthFindingId/v1":"25662e662e38667117ab403e4078a8394abc7e2a0c8116a3372d8f5daacdb1c3"}},{"ruleId":"D1","level":"warning","message":{"text":"project_utils.validate_project_structure (cyclomatic 27): project_utils.validate_project_structure 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":"skills/ppt-master/scripts/project_utils.py"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"d28e7260bbfbc9b791c439b121731bf4d9b45085b9845f8763aefae04387a303"}},{"ruleId":"D1","level":"warning","message":{"text":"template_structure._placement_lint_errors (cyclomatic 27): template_structure._placement_lint_errors 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":3373}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7e193891469ee5b36ee553e0e2a9547d19483ebe1f8365dd7f0f8b7627c7766"}},{"ruleId":"D1","level":"warning","message":{"text":"server.main (cyclomatic 26): server.main has cyclomatic complexity 26 (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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1922}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac54a969be6351ddae33872812599ea67321be85064d01c2cfc69fd7778dd82f"}},{"ruleId":"D1","level":"warning","message":{"text":"mirror_template_materialize._load_authoring_documents (cyclomatic 26): mirror_template_materialize._load_authoring_documents has cyclomatic complexity 26 (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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e9d4ab556b27bef40658eca7e18752452d000b1ac6604cc1c058dec2784d52d"}},{"ruleId":"D1","level":"warning","message":{"text":"native_payloads.hydrate_native_payload_refs (cyclomatic 26): native_payloads.hydrate_native_payload_refs has cyclomatic complexity 26 (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":"skills/ppt-master/scripts/native_payloads.py"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"f53b15c070179a7e7c9f99fda1ff348c05dc238798343e4b5388ad830fda25bd"}},{"ruleId":"D1","level":"warning","message":{"text":"project_specs._validate_condition (cyclomatic 26): project_specs._validate_condition has cyclomatic complexity 26 (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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"21319ac0ca327ad4eba02f5305f918332f13b85723200b381dc1157ab16a04dc"}},{"ruleId":"D1","level":"warning","message":{"text":"utils._transform_semantic_error (cyclomatic 26): utils._transform_semantic_error has cyclomatic complexity 26 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1145}}}],"partialFingerprints":{"codehealthFindingId/v1":"6df58405aaf814fc709c87a31169aba9e4944555bbc0f9ee57dd67a5045f55c7"}},{"ruleId":"D1","level":"warning","message":{"text":"update_spec.main (cyclomatic 26): update_spec.main has cyclomatic complexity 26 (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":"skills/ppt-master/scripts/update_spec.py"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"819b1c71867cf6d32794924530080c5b06d9a2e7b2fb93ff03d6fdfbaa3792c4"}},{"ruleId":"D1","level":"warning","message":{"text":"server._stage2_design_directions_error (cyclomatic 25): server._stage2_design_directions_error has cyclomatic complexity 25 (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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d414495110905a4974a7d707afe8bfcb6ecc1372daf7e198c03cacf55391252"}},{"ruleId":"D1","level":"warning","message":{"text":"native_enhance_pptx_core._source_state_errors (cyclomatic 25): native_enhance_pptx_core._source_state_errors has cyclomatic complexity 25 (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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"638e4ddc8cb7b0b7df58c2462e2f18bc062abf1439533b9bf35a7e396eb863e2"}},{"ruleId":"D1","level":"warning","message":{"text":"native_enhance_pptx_core._resolve_transition_plan (cyclomatic 25): native_enhance_pptx_core._resolve_transition_plan has cyclomatic complexity 25 (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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1459}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcf392ed08735ba960d26a6442be2b10251429ca24a80cd9a9b7ebdf9bef187f"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations._set_effect_option_value (cyclomatic 25): pptx_animations._set_effect_option_value has cyclomatic complexity 25 (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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1379}}}],"partialFingerprints":{"codehealthFindingId/v1":"788ac9ab1590c09bce380cdf65682cae91e94436023ce58312136e60960890ea"}},{"ruleId":"D1","level":"warning","message":{"text":"source_to_md.dispatch_single (cyclomatic 25): source_to_md.dispatch_single has cyclomatic complexity 25 (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":"skills/ppt-master/scripts/source_to_md.py"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c34262035a3a6dcdadf6ff14145bc575ca43c19e8d0301f259fd9ab81ffc890"}},{"ruleId":"D1","level":"warning","message":{"text":"fix_image_aspect.fix_image_aspect_in_svg (cyclomatic 25): fix_image_aspect.fix_image_aspect_in_svg has cyclomatic complexity 25 (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":"skills/ppt-master/scripts/svg_finalize/fix_image_aspect.py"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"135e9f9a9f21ede1ca5f1e0d38215e91751589a73d33b10102d75246bb49cf7d"}},{"ruleId":"D1","level":"warning","message":{"text":"animation_config._morph_scope_errors (cyclomatic 25): animation_config._morph_scope_errors has cyclomatic complexity 25 (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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"04753fabae1796fb1ba680904a3b4bd15c2a880d70d83e57361a690669b05ae6"}},{"ruleId":"D1","level":"warning","message":{"text":"builder._apply_explicit_layout_structure (cyclomatic 25): builder._apply_explicit_layout_structure has cyclomatic complexity 25 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":2722}}}],"partialFingerprints":{"codehealthFindingId/v1":"af558ddd216f83510b1543a3dfd21244062e11bb3a16d14f101052e41b390dcc"}},{"ruleId":"D1","level":"warning","message":{"text":"applier.apply_plan (cyclomatic 25): applier.apply_plan has cyclomatic complexity 25 (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":"skills/ppt-master/scripts/template_fill_pptx/applier.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e31eb046729429b9a1d9cd2eac99412613911c31ee165479513ad489548938"}},{"ruleId":"D1","level":"warning","message":{"text":"extract_svg_assets.extract_file (cyclomatic 24): extract_svg_assets.extract_file has cyclomatic complexity 24 (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":"skills/ppt-master/scripts/extract_svg_assets.py"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"9305516260b4c4ccab6d0bfb97623fe81ecc338540cd2516a8d8860463b238f3"}},{"ruleId":"D1","level":"warning","message":{"text":"narration_sync._load_timing_plan (cyclomatic 24): narration_sync._load_timing_plan has cyclomatic complexity 24 (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":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac6b38a2b55695db35f1265693887f1022324ef886b1ec7b86dfd6cdcf7a4cc8"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations._normalize_target_mapping (cyclomatic 24): pptx_animations._normalize_target_mapping has cyclomatic complexity 24 (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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":850}}}],"partialFingerprints":{"codehealthFindingId/v1":"4baa075a682da6fa766abf153371e02a4a7ea5927fb58eb9cd97a220651cd767"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._resolved_line (cyclomatic 24): chart_to_svg._resolved_line has cyclomatic complexity 24 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cb669d1cd02bdf448bef1ed5f72f45c9998311915cf3cbe40d03cf79001ea85"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._validate_legacy_axes (cyclomatic 24): chart_to_svg._validate_legacy_axes has cyclomatic complexity 24 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1314}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ca2726877fa1b016adae4c2588094447d0e9d59535d56d1c8aeac375fe17ba7"}},{"ruleId":"D1","level":"warning","message":{"text":"preset_authoring._validate_style (cyclomatic 24): preset_authoring._validate_style has cyclomatic complexity 24 (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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebdb1e7d76b17ee5cfb41ae701efa93bef5c6f7334e97413d2efa967ee8e9482"}},{"ruleId":"D1","level":"warning","message":{"text":"resource_paths._svg_image_payload_error (cyclomatic 24): resource_paths._svg_image_payload_error has cyclomatic complexity 24 (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":"skills/ppt-master/scripts/resource_paths.py"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"76d3be6fc55f2ca4bc6b927d67712000f6ef9b4b57b17083fc0bb9f4d9a48c6a"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_placeholder_carrier_flattening (cyclomatic 24): SVGQualityChecker._check_placeholder_carrier_flattening has cyclomatic complexity 24 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3729}}}],"partialFingerprints":{"codehealthFindingId/v1":"586f0fae0ab7034b25766f2464f06e85e09606d776547ca0d1bb4564d2955b6b"}},{"ruleId":"D1","level":"warning","message":{"text":"elements._nested_crop_clip_preset_geometry_error (cyclomatic 24): elements._nested_crop_clip_preset_geometry_error has cyclomatic complexity 24 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3334}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7681a7dffa34793b45b01e880364d80aa8de691cc6c60b8eb07f0991c28ea0a"}},{"ruleId":"D1","level":"warning","message":{"text":"elements.project_clip_path_errors (cyclomatic 24): elements.project_clip_path_errors has cyclomatic complexity 24 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3438}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d4678ee6b380192abdcb07c182b2616366227d3ccec59405c09c9aec4bc1ae1"}},{"ruleId":"D1","level":"warning","message":{"text":"image_gen._run_manifest (cyclomatic 23): image_gen._run_manifest 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":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":795}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eaad99837ddb1528a90c6b7c984ea59a67c31b7392679c1edcd2a57d3da0741"}},{"ruleId":"D1","level":"warning","message":{"text":"mirror_template_materialize._validate_graph_roster (cyclomatic 23): mirror_template_materialize._validate_graph_roster 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":839}}}],"partialFingerprints":{"codehealthFindingId/v1":"24cb665b3ed6db2ef26df62903677335d8e1fa0c00dd1bd2559cfc661d08d3c4"}},{"ruleId":"D1","level":"warning","message":{"text":"native_enhance_pptx_core._collect_material_readiness (cyclomatic 23): native_enhance_pptx_core._collect_material_readiness 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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"24aef7ec6adda68eab63499ec97d65b9cc58830e946fdf8dec85ce9d3b3e6ddc"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations.create_sequence_timing_xml (cyclomatic 23): pptx_animations.create_sequence_timing_xml 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1845}}}],"partialFingerprints":{"codehealthFindingId/v1":"7493cbd6c4969a0ee8d467e194b32bad53bc09b1cc5a4a831b451bccb35cd498"}},{"ruleId":"D1","level":"warning","message":{"text":"tbl_to_svg._legacy_text_body_has_unsupported_formatting (cyclomatic 23): tbl_to_svg._legacy_text_body_has_unsupported_formatting 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"22b81a3951808b3e8187915cb398f88c1bb1efe34349a16b671544db76620967"}},{"ruleId":"D1","level":"warning","message":{"text":"ppt_to_md._xy_chart_to_markdown (cyclomatic 23): ppt_to_md._xy_chart_to_markdown 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":"skills/ppt-master/scripts/source_to_md/ppt_to_md.py"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"d48b2054bfaad293d61147de0230748aa9f74454fe5e073cce41f75c5446ee91"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_position_calculator.analyze_svg_file (cyclomatic 23): svg_position_calculator.analyze_svg_file 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":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":995}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6e65687dcc127cfc1e32330503f692da59a579724a924545d5553800d032cd7"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_contracts.check_forbidden_elements (cyclomatic 23): svg_contracts.check_forbidden_elements has cyclomatic complexity 23 (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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7c2397f11776791b2b66d450fd1ddac398989fb4ba0cad9daad95a5b4fbf219"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_contracts.check_stroke_style_values (cyclomatic 23): svg_contracts.check_stroke_style_values 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e6a09e0a4890a595fb01bf12702e42e8201a66282a21be904c0cb8069471002"}},{"ruleId":"D1","level":"warning","message":{"text":"extract_svg_assets.main (cyclomatic 22): extract_svg_assets.main has cyclomatic complexity 22 (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":"skills/ppt-master/scripts/extract_svg_assets.py"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"b25ea31fc60b4a3aecd951523d13eceaa4f5d61868bdeed9554075a37dc41012"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_opc_validation.verify_internal_relationships (cyclomatic 22): pptx_opc_validation.verify_internal_relationships 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":"skills/ppt-master/scripts/pptx_opc_validation.py"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e5eb9c016bb14ac04fa9792a57a5450afb2f48bb4f0e3fe203fe894c36cad09"}},{"ruleId":"D1","level":"warning","message":{"text":"converter.convert_pptx_to_svg (cyclomatic 22): converter.convert_pptx_to_svg 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":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6dea8da6ffff63f1831da57eafc7bc29c8eff0f1bdf8c63cafb27c94cef211d"}},{"ruleId":"D1","level":"warning","message":{"text":"page_context.build_page_context (cyclomatic 22): page_context.build_page_context has cyclomatic complexity 22 (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":"skills/ppt-master/scripts/project_management/page_context.py"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec688c0d0e51297195f633d7ea9481a6db7008dc98277e738e7b297561780c05"}},{"ruleId":"D1","level":"warning","message":{"text":"prompt_audit.audit_load_sets (cyclomatic 22): prompt_audit.audit_load_sets 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a009949dd2612c7499752c7e2078ba86011a16e99ac531ff0c53929ff2becfc"}},{"ruleId":"D1","level":"warning","message":{"text":"doc_to_md._sanitize_epub_manifest (cyclomatic 22): doc_to_md._sanitize_epub_manifest 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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":1062}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb05b92427c6893bbf0310038d41e508867db5851146aeb7c8d71a54b305dd28"}},{"ruleId":"D1","level":"warning","message":{"text":"ppt_to_md._category_chart_to_markdown (cyclomatic 22): ppt_to_md._category_chart_to_markdown 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":"skills/ppt-master/scripts/source_to_md/ppt_to_md.py"},"region":{"startLine":608}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8273f044ee7d7d8a656648cd73c3f8ba4c91a7dec6821ee8fc9de93c3ba0231"}},{"ruleId":"D1","level":"warning","message":{"text":"web_to_md.download_and_rewrite_images (cyclomatic 22): web_to_md.download_and_rewrite_images 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":"skills/ppt-master/scripts/source_to_md/web_to_md.py"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c6939232069a89e24e3aedc7855fea373245df5fd272c934dcb98a7336445b9"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_authoring_view.main (cyclomatic 22): svg_authoring_view.main has cyclomatic complexity 22 (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":"skills/ppt-master/scripts/svg_authoring_view.py"},"region":{"startLine":962}}}],"partialFingerprints":{"codehealthFindingId/v1":"07dabd9ab10e8b8086868a06ad24293d99747bdb022b881c50490823a5c4b677"}},{"ruleId":"D1","level":"warning","message":{"text":"elements._resolve_clip_geometry (cyclomatic 22): elements._resolve_clip_geometry 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3554}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc20443a050066ef102cb19c0c7cfecffa7ab5b03265a6d9503a65bfee1228c2"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.parse_project_filter_params (cyclomatic 22): utils.parse_project_filter_params 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2486}}}],"partialFingerprints":{"codehealthFindingId/v1":"0363020430173f9da43b1ca460d2ff4c205db3f5e30ad8fd9aa870e66d4999f4"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_xml._axis_pair_xml (cyclomatic 22): chart_xml._axis_pair_xml has cyclomatic complexity 22 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"c43a1f42d6d99fc5f4dfe433ed01554b65c52004554d5895a78c2ffaec6b35ce"}},{"ruleId":"D1","level":"warning","message":{"text":"table._table_run (cyclomatic 22): table._table_run 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"8734c13d6eeab9789bafa61f0c12527b8c38e815c9b9d5669a4dcc9ada0ea3e2"}},{"ruleId":"D1","level":"warning","message":{"text":"builder._placeholder_text_body (cyclomatic 22): builder._placeholder_text_body 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":2375}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e86331d51495fef8aeef624c47b4b373a2e34eda201088e7766796a04547f01"}},{"ruleId":"D1","level":"warning","message":{"text":"checker._fit_status (cyclomatic 22): checker._fit_status 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":"skills/ppt-master/scripts/template_fill_pptx/checker.py"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"32e6dd7765e034f6c683ed7cc314ff50321297a40c59d88aaae9543388123ffa"}},{"ruleId":"D1","level":"warning","message":{"text":"image_search.load_search_manifest (cyclomatic 21): image_search.load_search_manifest 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":1342}}}],"partialFingerprints":{"codehealthFindingId/v1":"87696d46d6d7ab0612779db79bf9dd5460eb0547c4cc3e9d50175ed67b5cda8d"}},{"ruleId":"D1","level":"warning","message":{"text":"provider_common.score_candidate (cyclomatic 21): provider_common.score_candidate 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":"skills/ppt-master/scripts/image_sources/provider_common.py"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8d535e55e5a875eb711f085e02971158855dbd75270aab0a8d9f51934b9f328"}},{"ruleId":"D1","level":"warning","message":{"text":"mirror_template_materialize._slot_wrapper (cyclomatic 21): mirror_template_materialize._slot_wrapper 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1978}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c4761d348d8c45d9a15471f2ff1da78d7381eb36259927215a5accdcb43046b"}},{"ruleId":"D1","level":"warning","message":{"text":"formula._apply_operator (cyclomatic 21): formula._apply_operator 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":"skills/ppt-master/scripts/pptx_shapes/formula.py"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"4859ecd7810b42232cd3bba90b17f4cd75d3db069ef8d765c109bb4a664ad8f4"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._pie_visual_styles (cyclomatic 21): chart_to_svg._pie_visual_styles 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"b77f395a6bfb96157a9eaaa80b29c065cbb381370ad6c4264abc5ac703ba3607"}},{"ruleId":"D1","level":"warning","message":{"text":"fill_to_svg._resolve_grad_fill (cyclomatic 21): fill_to_svg._resolve_grad_fill 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":"skills/ppt-master/scripts/pptx_to_svg/fill_to_svg.py"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"a27aced952b146c99a62c930bc12ba5c79017f2591b05d144d7eeb26c82018e3"}},{"ruleId":"D1","level":"warning","message":{"text":"pic_to_svg._apply_blip_image_effects (cyclomatic 21): pic_to_svg._apply_blip_image_effects 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":"skills/ppt-master/scripts/pptx_to_svg/pic_to_svg.py"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"a072e387986a133d41b17b427dd1460c665f524f584ee1946fcaa99d3bd60f04"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_transitions.validate_generated_transition_xml (cyclomatic 21): pptx_transitions.validate_generated_transition_xml 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":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":2176}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e41a462a533a4fbbbc61ca780646fbfb501534fa1d70dbd9e2295e001e3c573"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_transitions.validate_slide_transition_structure (cyclomatic 21): pptx_transitions.validate_slide_transition_structure 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":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":2544}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbeed5eb090f04288c7bdef3684c2b002dd6b6e0c6724517bda4577a3955b089"}},{"ruleId":"D1","level":"warning","message":{"text":"project_specs.parse_spec_lock_image_value (cyclomatic 21): project_specs.parse_spec_lock_image_value 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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"5630833571a8b71709fc1c16971c2543c84beb4aef38d0355bf60faaf3defccb"}},{"ruleId":"D1","level":"warning","message":{"text":"project_utils.validate_communication_trace (cyclomatic 21): project_utils.validate_communication_trace 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":"skills/ppt-master/scripts/project_utils.py"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"770981ee76b795830109751bee935dc23c7cc6bffeb14216a612a5a1e5eb61af"}},{"ruleId":"D1","level":"warning","message":{"text":"doc_to_md._docx_image_occurrences (cyclomatic 21): doc_to_md._docx_image_occurrences 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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"66eef5543db7025daea549647a67abd0b7466c2d10e3ade8eeed9933a590864f"}},{"ruleId":"D1","level":"warning","message":{"text":"web_to_md.extract_metadata (cyclomatic 21): web_to_md.extract_metadata 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":"skills/ppt-master/scripts/source_to_md/web_to_md.py"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4d52f968f8edd9dd39872c2d888e5f4c4bfda258fac7a98c225bee584c3c0e5"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_icon_placeholders (cyclomatic 21): SVGQualityChecker._check_icon_placeholders 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2843}}}],"partialFingerprints":{"codehealthFindingId/v1":"16dfdc8da723da2ab4b2f1e99942ec3deac647cb37c2f396c0f514dc96301e83"}},{"ruleId":"D1","level":"warning","message":{"text":"elements._valid_emf_payload (cyclomatic 21): elements._valid_emf_payload 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"e592adb09114d907d38ad9694ebfdb00b96e6af2d5282d5c96dc24b7901b8d27"}},{"ruleId":"D1","level":"warning","message":{"text":"elements.validate_preset_geometry_metadata (cyclomatic 21): elements.validate_preset_geometry_metadata 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":874}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d14027f08941df68f886695f472acfe0f26d4da43c8e8dacc9f6b7726aefd0f"}},{"ruleId":"D1","level":"warning","message":{"text":"elements.convert_circle (cyclomatic 21): elements.convert_circle 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1357}}}],"partialFingerprints":{"codehealthFindingId/v1":"c47e878f631bd7a2eceaebe0dd11c0bab25d3adeb917959724f0df438728a990"}},{"ruleId":"D1","level":"warning","message":{"text":"marker_common._element_local_bbox (cyclomatic 21): marker_common._element_local_bbox 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"e09ea316a5da8c09bb8baf15659723c4368d92ccb394409a1f9f79cf3ed1abe4"}},{"ruleId":"D1","level":"warning","message":{"text":"template_preview_pptx.main (cyclomatic 21): template_preview_pptx.main 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":"skills/ppt-master/scripts/template_preview_pptx.py"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"73bd2fca7bd013c2264b0393689aded2e1ff447a476d42025dee27e696ffe22e"}},{"ruleId":"D1","level":"warning","message":{"text":"total_md_split.parse_total_md (cyclomatic 21): total_md_split.parse_total_md 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":"skills/ppt-master/scripts/total_md_split.py"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"c630a07bd486a13fe54a86beb023d50edeaafd6e1dcd3022ed44c94b049b921a"}},{"ruleId":"D1","level":"warning","message":{"text":"video_motion_plan.build_video_motion_plan (cyclomatic 21): video_motion_plan.build_video_motion_plan 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":"skills/ppt-master/scripts/video_motion_plan.py"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a29596aa24e2c3c8431c1017adfe5d63eab6ebfbfc997475ff43f4bb6d1b3bb"}},{"ruleId":"D1","level":"warning","message":{"text":"latex_render._process_item (cyclomatic 20): latex_render._process_item 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":"skills/ppt-master/scripts/latex_render.py"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"417b93a62a10271b92d7f776d2ccbaabf3ab1dbf29a46fd2e9e13217d7062e5c"}},{"ruleId":"D1","level":"warning","message":{"text":"mirror_template_materialize._mark_explicit_breaks (cyclomatic 20): mirror_template_materialize._mark_explicit_breaks 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1067}}}],"partialFingerprints":{"codehealthFindingId/v1":"12f4f5bba5457c5ece8d554c91268d83a753f9c647357b5e0144640eaa3ace31"}},{"ruleId":"D1","level":"warning","message":{"text":"mirror_template_materialize._copy_text_carrier (cyclomatic 20): mirror_template_materialize._copy_text_carrier 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1621}}}],"partialFingerprints":{"codehealthFindingId/v1":"309b6779288c06b293ba678e4dff28660e2ef8f417a03259a78db346d1c74e28"}},{"ruleId":"D1","level":"warning","message":{"text":"native_payloads.externalize_native_payloads (cyclomatic 20): native_payloads.externalize_native_payloads 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":"skills/ppt-master/scripts/native_payloads.py"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b0d9c6c1a1e85f48a69a5cb4fee43dc4796a3d69f1eb70d2ee935a89ae47650"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations._scale_animation_row_duration (cyclomatic 20): pptx_animations._scale_animation_row_duration 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1182}}}],"partialFingerprints":{"codehealthFindingId/v1":"582c3eead83c2378c17c242bb76724851851f1f3d1b94b03244aa232982ae589"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations._timing_summary (cyclomatic 20): pptx_animations._timing_summary 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":2504}}}],"partialFingerprints":{"codehealthFindingId/v1":"05af82f7b0db66d8d141a24d90f5ce3746caf9cdbacd97472aa2723c2802c17a"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_template_import.main (cyclomatic 20): pptx_template_import.main 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":"skills/ppt-master/scripts/pptx_template_import.py"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeaa13c8e4e73406e2a34d806accf4c20b145f9bea922e6fd16ddb2fce45844f"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._resolved_solid_fill (cyclomatic 20): chart_to_svg._resolved_solid_fill 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e18370e461ce21cbb319bb7c6a8b69bcabfaa38958a9bd50472b77ff9a77b93"}},{"ruleId":"D1","level":"warning","message":{"text":"converter._extract_theme_info (cyclomatic 20): converter._extract_theme_info 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":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"e803271484b557c378f07854bf5297add46ce0e2916b400aeee5e37374255197"}},{"ruleId":"D1","level":"warning","message":{"text":"preset_authoring.render_preset_shape_fragment (cyclomatic 20): preset_authoring.render_preset_shape_fragment 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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"65c7a94063a46a6f00771fbdfe4f8b794d3ed904e2524c58416da023e2b9d0c7"}},{"ruleId":"D1","level":"warning","message":{"text":"tbl_to_svg._table_has_unsupported_direct_formatting (cyclomatic 20): tbl_to_svg._table_has_unsupported_direct_formatting 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":882}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7519613840e92d95419277266dc4396258723447832bd62656e933d63d84d0a"}},{"ruleId":"D1","level":"warning","message":{"text":"project_specs._validate_references (cyclomatic 20): project_specs._validate_references 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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d8e42ea0f863f22712ccaae23e3e13f4a1b843b90c2da86224d34b05894d6af"}},{"ruleId":"D1","level":"warning","message":{"text":"project_specs.validate_project_artifacts (cyclomatic 20): project_specs.validate_project_artifacts 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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":1234}}}],"partialFingerprints":{"codehealthFindingId/v1":"32cf421fd6bca6a1f1499b5ba4b286ab35dbc840df9b73a15b5c94f4506f6fd4"}},{"ruleId":"D1","level":"warning","message":{"text":"prompt_audit._registry_ids (cyclomatic 20): prompt_audit._registry_ids 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1023}}}],"partialFingerprints":{"codehealthFindingId/v1":"a93041a4e220457fd72461e6691ada4c7aa978c8bed7839a7b6783c73784100a"}},{"ruleId":"D1","level":"warning","message":{"text":"prompt_audit.run_audit (cyclomatic 20): prompt_audit.run_audit 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1470}}}],"partialFingerprints":{"codehealthFindingId/v1":"02037e5d5641d4fe2f09e6073e994ee9d5ec9d79cf9eed1c8cc953b07f22c5a9"}},{"ruleId":"D1","level":"warning","message":{"text":"source_to_md.dispatch_many (cyclomatic 20): source_to_md.dispatch_many 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":"skills/ppt-master/scripts/source_to_md.py"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea3cab7f54964a0d30855ecbfb79b1af78307ac4ae24715a639f1eea6850e9a9"}},{"ruleId":"D1","level":"warning","message":{"text":"pdf_to_md.should_keep_image (cyclomatic 20): pdf_to_md.should_keep_image 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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"2262fccae7c56d06c52501b7a741e9bc593044ef20a8226f014f604fec41f762"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_animation_group_ids (cyclomatic 20): SVGQualityChecker._check_animation_group_ids 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3268}}}],"partialFingerprints":{"codehealthFindingId/v1":"edea53ceea0bcf7c485264b9f4f47c485498f290166f8ec93b1175375c9ffcd7"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_illustration_resource_contract (cyclomatic 20): SVGQualityChecker._check_illustration_resource_contract 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":5281}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfa886ac0396785cead5a8af5aa395d09f882ec01b86e13aad1e72c5a3cc9fff"}},{"ruleId":"D1","level":"warning","message":{"text":"animation_config._animation_effect_entry_errors (cyclomatic 20): animation_config._animation_effect_entry_errors 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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":968}}}],"partialFingerprints":{"codehealthFindingId/v1":"05eb0f9c07987b1520909d3915c4589dfb3fa254fc48dfe45a16385fbf02e8ea"}},{"ruleId":"D1","level":"warning","message":{"text":"elements._resolve_nested_svg_clip_geometry (cyclomatic 20): elements._resolve_nested_svg_clip_geometry 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":4819}}}],"partialFingerprints":{"codehealthFindingId/v1":"701a36589bcacf954b2b7921fabce7856593799a848d76cd8b3bdbd4e37fb495"}},{"ruleId":"D1","level":"warning","message":{"text":"paths.project_gradient_geometry_errors (cyclomatic 20): paths.project_gradient_geometry_errors 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"290cda484c6920906dc4f6d6dd286e7f3f9c6fc9b593a02daeaf7d8d0b8948c7"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.parse_svg_color (cyclomatic 20): utils.parse_svg_color 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1663}}}],"partialFingerprints":{"codehealthFindingId/v1":"145eb7f4be0e638f71960819d4c9138b33d363625f83f424af6453c63b82641b"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_data._chartex_chart_data (cyclomatic 20): chart_data._chartex_chart_data 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":1076}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee5423431d1ec5bc6f19c84b7628e395ded2c9842ea3ce597b4137383ce77110"}},{"ruleId":"D1","level":"warning","message":{"text":"builder._solid_background_xml_from_shape (cyclomatic 20): builder._solid_background_xml_from_shape 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1853}}}],"partialFingerprints":{"codehealthFindingId/v1":"a588c4742df5bc46bb90fadcffb5bce1791bcd09dad13db0aeb7d5c3dc55dd25"}},{"ruleId":"D1","level":"warning","message":{"text":"cli._recorded_narration_on_click_slides (cyclomatic 20): cli._recorded_narration_on_click_slides 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b1774f40257dbb5a4c32d994a32d54a8f47926e8914b02069d1507c1705a9a0"}},{"ruleId":"D1","level":"warning","message":{"text":"shape_boolean._validate_geometry_presentation (cyclomatic 20): shape_boolean._validate_geometry_presentation 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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"18554d296a958708023ee2334fb7abe74d460a1081c0ba2a16635213170d938a"}},{"ruleId":"D1","level":"warning","message":{"text":"_LocalUseExpander._materialize_use (cyclomatic 20): _LocalUseExpander._materialize_use 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":"skills/ppt-master/scripts/svg_to_pptx/use_expander.py"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f215063dc12f03f734899dde7035f9ab86f7fb24f1aef53bc32f4f70e2bf47b"}},{"ruleId":"D1","level":"warning","message":{"text":"animation_config.main (cyclomatic 19): animation_config.main 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":"skills/ppt-master/scripts/animation_config.py"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a8d8e70ffc80cdcb6ee226fb4c4514c086e372314473a6a1bdbfe216309d40c"}},{"ruleId":"D1","level":"warning","message":{"text":"server._submission_stage_error (cyclomatic 19): server._submission_stage_error 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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":847}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f83f1bc89079ab21890a61ec075d74dbc0b54ef9642dc990044e19fd35cf814"}},{"ruleId":"D1","level":"warning","message":{"text":"server._build_session_state (cyclomatic 19): server._build_session_state 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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1046}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb1757baa400e5bc54664cafb0cc80fdd8c30c09d91f48adddc7baa8b6d113cb"}},{"ruleId":"D1","level":"warning","message":{"text":"backend_openai._edit_image (cyclomatic 19): backend_openai._edit_image has cyclomatic complexity 19 (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":"skills/ppt-master/scripts/image_backends/backend_openai.py"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"8080f5bff88b91629d908d4a001b8d067e1afce61247b3d7b0fbbfb91e172836"}},{"ruleId":"D1","level":"warning","message":{"text":"image_search.search_and_download (cyclomatic 19): image_search.search_and_download 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"00392445603fc98559cb2dbc3a444a843b8713b9342414093372bbef9f043fee"}},{"ruleId":"D1","level":"warning","message":{"text":"mirror_template_materialize._slot_plans (cyclomatic 19): mirror_template_materialize._slot_plans 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1538}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d0f0fc2ac450729ad8b47b35130c56560b6aff1cbdcdf0fb5a8c5841e8120ff"}},{"ruleId":"D1","level":"warning","message":{"text":"native_enhance_pptx_core._validate_plan_modules (cyclomatic 19): native_enhance_pptx_core._validate_plan_modules 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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1390}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9e3bb77577745c2e08f22221a51c2c08547fd2eb447657975e0bd4093bdf89f"}},{"ruleId":"D1","level":"warning","message":{"text":"chartex_to_svg._payload_from_chartex_xml (cyclomatic 19): chartex_to_svg._payload_from_chartex_xml 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":"skills/ppt-master/scripts/pptx_to_svg/chartex_to_svg.py"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfc7fb6c285f5129129c855319bb662566a26ee225107dc9fd81ac4863c6b837"}},{"ruleId":"D1","level":"warning","message":{"text":"converter.publish_staged_workspace (cyclomatic 19): converter.publish_staged_workspace 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":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"de576651d37dbc7579d0e8d7a1e80b2dd5e220f7ebcf1382c9032a99baac41dc"}},{"ruleId":"D1","level":"warning","message":{"text":"normalized_chart_svg._render_bars (cyclomatic 19): normalized_chart_svg._render_bars 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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"9357d6ce44567ec61fe0e2e9ac6ea022a2a8b39ff322f2dd38e02fc6e1c33cdd"}},{"ruleId":"D1","level":"warning","message":{"text":"slide_to_svg._build_geometry_xml (cyclomatic 19): slide_to_svg._build_geometry_xml 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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cea68e32e493c3ea76b39f716533441919efb3ac1853be6cfe860570164829a"}},{"ruleId":"D1","level":"warning","message":{"text":"embed_images._optimize_image_bytes (cyclomatic 19): embed_images._optimize_image_bytes 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":"skills/ppt-master/scripts/svg_finalize/embed_images.py"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fe70d337aa8c70cedb8b930fbe2f38e7594b30fd890222ff331567437405419"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_rect_to_path.main (cyclomatic 19): svg_rect_to_path.main 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":"skills/ppt-master/scripts/svg_finalize/svg_rect_to_path.py"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b971d8cbea9485f63d199fe8c3a72b9e20c6aace0fd275334c37a82cb061f0e"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_sourced_image_attribution (cyclomatic 19): SVGQualityChecker._check_sourced_image_attribution 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":4500}}}],"partialFingerprints":{"codehealthFindingId/v1":"669d62b0ce314530254fb6dabead1ba3d221f5c786cf457aa53e8ae8b2a7de0b"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_sourced_image_provenance (cyclomatic 19): SVGQualityChecker._check_sourced_image_provenance 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6104}}}],"partialFingerprints":{"codehealthFindingId/v1":"d63340e3ca7cf6a9ab849151a4bf4c363ab7b478e334618be4bade72145ab353"}},{"ruleId":"D1","level":"warning","message":{"text":"paths._parse_svg_path_tokens (cyclomatic 19): paths._parse_svg_path_tokens 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad205b2ccbdbfa3c473377aba760434225dce19dc059fb1ee70c2cf04883d362"}},{"ruleId":"D1","level":"warning","message":{"text":"table._resolve_table_merge_layout (cyclomatic 19): table._resolve_table_merge_layout 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7fef6fbf3858714e448390376e4d0b11bf01a01bead3e4ac0058904d2b250e4"}},{"ruleId":"D1","level":"warning","message":{"text":"template_structure.parse_optional_layout_slides (cyclomatic 19): template_structure.parse_optional_layout_slides 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1813}}}],"partialFingerprints":{"codehealthFindingId/v1":"62fe0c63bb7a2381105b3cdb3a57aba3f808b93760576ff159022ab93117cf77"}},{"ruleId":"D1","level":"warning","message":{"text":"template_structure.template_lock_errors (cyclomatic 19): template_structure.template_lock_errors 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":2151}}}],"partialFingerprints":{"codehealthFindingId/v1":"42bf0afa17cbd3af370ac649ed10174aaa6fc73e69f2d9255b5f4c589d9f8da7"}},{"ruleId":"D1","level":"warning","message":{"text":"backend_openai._generate_image (cyclomatic 18): backend_openai._generate_image 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":"skills/ppt-master/scripts/image_backends/backend_openai.py"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"d920d408f0d22cd0f4b256407894cb35264f3b2a441b285c1cb4132529fa0e37"}},{"ruleId":"D1","level":"warning","message":{"text":"image_gen.render_manifest_md (cyclomatic 18): image_gen.render_manifest_md 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":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":1011}}}],"partialFingerprints":{"codehealthFindingId/v1":"6db5628d0b0bfa41f18428f955848a8945ec44271e7ec7c18e92505fdbe50d35"}},{"ruleId":"D1","level":"warning","message":{"text":"image_search.fetch_url_replace (cyclomatic 18): image_search.fetch_url_replace 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":1198}}}],"partialFingerprints":{"codehealthFindingId/v1":"7275e777c701b82b0f5ccbc59894a98a237cd83fd4d8b7c07fe63a31e5ee7ea0"}},{"ruleId":"D1","level":"warning","message":{"text":"provider_wikimedia.parse_results (cyclomatic 18): provider_wikimedia.parse_results 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":"skills/ppt-master/scripts/image_sources/provider_wikimedia.py"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"734a53933269d64ab7204a74ff40d593896e017efb6001f1ab219e9898227e69"}},{"ruleId":"D1","level":"warning","message":{"text":"notes_to_audio._expected_note_roster (cyclomatic 18): notes_to_audio._expected_note_roster 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":"skills/ppt-master/scripts/notes_to_audio.py"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"35802b72e62cdee30a39bd1799b0f85884d2d45e6faaef16386aaf1a772a1a9b"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations._apply_timing_options (cyclomatic 18): pptx_animations._apply_timing_options 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1513}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe297e41b4eb47cfd90bfdffbb9f04f39f5ca5e07ffa0b48be70be2b946eb366"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_delivery_check._content_type_maps (cyclomatic 18): pptx_delivery_check._content_type_maps 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":"skills/ppt-master/scripts/pptx_delivery_check.py"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"316e418e16d0c06ff42abee15648f184f35ef9de52e9d5204b1fe8c84a53a12f"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_delivery_check._font_faces_for_advisory (cyclomatic 18): pptx_delivery_check._font_faces_for_advisory 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":"skills/ppt-master/scripts/pptx_delivery_check.py"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae7ce5ffdf594e70fcb650a336a69b8bd6ee01f4ea2373e41a1d5edebb4f7994"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_to_svg.main (cyclomatic 18): pptx_to_svg.main 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":"skills/ppt-master/scripts/pptx_to_svg.py"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ffca5836d6b5765ed50440a583054c208740f3f71c5ed30c086f38c977b4585"}},{"ruleId":"D1","level":"warning","message":{"text":"effect_to_svg._validate_color (cyclomatic 18): effect_to_svg._validate_color 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":"skills/ppt-master/scripts/pptx_to_svg/effect_to_svg.py"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fb1c3b05360a3e719a7c19ed1baaf7b86f63a2172646012bed174c1faa8975d"}},{"ruleId":"D1","level":"warning","message":{"text":"pic_to_svg.convert_blip_fill (cyclomatic 18): pic_to_svg.convert_blip_fill 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":"skills/ppt-master/scripts/pptx_to_svg/pic_to_svg.py"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c0954479378130ea4811725b6b0b4fd7f02ee86d20d18d83737f26c47b31f4a"}},{"ruleId":"D1","level":"warning","message":{"text":"page_context.page_context_usage_report (cyclomatic 18): page_context.page_context_usage_report 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":"skills/ppt-master/scripts/project_management/page_context.py"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4d29d30765fc60220291bb64a36c08161044e17cc8f452c0190884f6e0d6d2c"}},{"ruleId":"D1","level":"warning","message":{"text":"prompt_audit.audit_schema_grammars (cyclomatic 18): prompt_audit.audit_schema_grammars 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1375}}}],"partialFingerprints":{"codehealthFindingId/v1":"71e852b5054f9c68ff0e0fa06ca2d334b6350a6ecfc319ca353e36a3b92c0332"}},{"ruleId":"D1","level":"warning","message":{"text":"_batch.run_path_batch (cyclomatic 18): _batch.run_path_batch 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":"skills/ppt-master/scripts/source_to_md/_batch.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"8190f7ca0878cd9852b7a5c7df200c0c37e6d8850ec814ba5ca273a44ceb831a"}},{"ruleId":"D1","level":"warning","message":{"text":"doc_to_md._docx_inject_math_latex (cyclomatic 18): doc_to_md._docx_inject_math_latex 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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"202bcdfa2e4eb2ad1bab5c849731bdeeab38606f3bd737f8717c5b5f901a1d1c"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._positioned_text_lines (cyclomatic 18): SVGQualityChecker._positioned_text_lines 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":1817}}}],"partialFingerprints":{"codehealthFindingId/v1":"db929caadd3724d15b447fa5b21fc4c9b5afc17532fec9b47f8b20ff0c1252e2"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_module_bounds_contract (cyclomatic 18): SVGQualityChecker._check_module_bounds_contract 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2307}}}],"partialFingerprints":{"codehealthFindingId/v1":"91d7d916576780bfc8693f207b6135891f05492982a227624b1047e9c4ece4f2"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_contracts.check_authoring_property_contract (cyclomatic 18): svg_contracts.check_authoring_property_contract 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f088b5df867044b71855284280924baec46ffea56d87ae8eaa02459924af4e0"}},{"ruleId":"D1","level":"warning","message":{"text":"animation_config._resolved_animation_parameter_errors (cyclomatic 18): animation_config._resolved_animation_parameter_errors 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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b183d0d8ae65e73e33bf7bd3ef93c60b0a070ac12300d5ccc053ac656c8ff67"}},{"ruleId":"D1","level":"warning","message":{"text":"elements._override_run_attrs (cyclomatic 18): elements._override_run_attrs 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":2295}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ac234509699d254ffdfc446f8d265611487edf38ad361e15bdc42d3fcb119df"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_style._legend_candidate_texts (cyclomatic 18): chart_style._legend_candidate_texts 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6208de1d251711a3b0a8c7ec4a423ffa325b8d3787fbffd4b57853238054fe7"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_xml._series_xml (cyclomatic 18): chart_xml._series_xml 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"c25586fac38b6d06e52daf4edf8d65128874157ea1bbdfe53d28a1b46bfabc03"}},{"ruleId":"D1","level":"warning","message":{"text":"shape_boolean._connected_components (cyclomatic 18): shape_boolean._connected_components 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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":1080}}}],"partialFingerprints":{"codehealthFindingId/v1":"f000b1e46dc05e457a537fe218d32eee6dd620bf9ca809bcb46a1ed8fa44ba69"}},{"ruleId":"D1","level":"warning","message":{"text":"diagram_read.smartart_to_markdown (cyclomatic 18): diagram_read.smartart_to_markdown 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":"skills/ppt-master/scripts/template_fill_pptx/diagram_read.py"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"930fd040f404698bf862250083139b6fdc02790f1116706a65611659510499b1"}},{"ruleId":"D1","level":"warning","message":{"text":"table_fill._apply_table_edits_to_slide (cyclomatic 18): table_fill._apply_table_edits_to_slide 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":"skills/ppt-master/scripts/template_fill_pptx/table_fill.py"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"9392a67c238ec976716ecb3f3da4a1322c856318c9d8742359218d47cd553841"}},{"ruleId":"D1","level":"warning","message":{"text":"manifest.parse_theme (cyclomatic 18): manifest.parse_theme 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":"skills/ppt-master/scripts/template_import/manifest.py"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"daba1d0e6157b52d1e8dac052ae31d2867567ed63279b6a03c6d897178915410"}},{"ruleId":"D1","level":"warning","message":{"text":"native_structure.build_native_structure (cyclomatic 18): native_structure.build_native_structure 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":"skills/ppt-master/scripts/template_import/native_structure.py"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"1de86571dc847f8f7d16250670ff3d6f330a90248da10b2d66d6d69323a47733"}},{"ruleId":"D1","level":"warning","message":{"text":"backend_common.save_image_bytes (cyclomatic 17): backend_common.save_image_bytes 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":"skills/ppt-master/scripts/image_backends/backend_common.py"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"e047069dc19418fba2261cc7cbfac139d0c9c93723482d93c0b7e3becf3bd341"}},{"ruleId":"D1","level":"warning","message":{"text":"mirror_template_materialize._flatten_fixed_group (cyclomatic 17): mirror_template_materialize._flatten_fixed_group 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1288}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7ca95e783a31ab97f47fca7a39401b1b486237356603a8712a5c93f56589d2f"}},{"ruleId":"D1","level":"warning","message":{"text":"pptx_animations.validate_pptx_animation_package (cyclomatic 17): pptx_animations.validate_pptx_animation_package 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":3568}}}],"partialFingerprints":{"codehealthFindingId/v1":"70f35afbe4e0b425ffed9a60ce33098f1fc1df38d8ec6a614ee4875f0d50468e"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg.extract_native_chart_payload (cyclomatic 17): chart_to_svg.extract_native_chart_payload 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"669748914d794728c269aa0d3c5ea95c9273b473555e4d552068ad2fcb16e219"}},{"ruleId":"D1","level":"warning","message":{"text":"effect_to_svg.convert_effects (cyclomatic 17): effect_to_svg.convert_effects 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":"skills/ppt-master/scripts/pptx_to_svg/effect_to_svg.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"575a75d3c6086d20c718a3556f2401ae661470a95d41a2f2d83284a726e89cc7"}},{"ruleId":"D1","level":"warning","message":{"text":"fill_to_svg._pattern_foreground (cyclomatic 17): fill_to_svg._pattern_foreground 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":"skills/ppt-master/scripts/pptx_to_svg/fill_to_svg.py"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"a414204f32fa73f8a5c36ae0567f2cfa678ef9d650db09ce11f6c2d5a016642f"}},{"ruleId":"D1","level":"warning","message":{"text":"normalized_chart_svg._render_lines_or_areas (cyclomatic 17): normalized_chart_svg._render_lines_or_areas 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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"57d2cf2d1130b77fea5a4f974960154beeffde16aae1cc5c131abeb9786b7f9a"}},{"ruleId":"D1","level":"warning","message":{"text":"tbl_to_svg._convert_cell_text (cyclomatic 17): tbl_to_svg._convert_cell_text 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1541}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaa86d66b26d9c170e90505a19633213bd215bc82b7c835ed7983bd8869972fd"}},{"ruleId":"D1","level":"warning","message":{"text":"txbody_to_svg._parse_paragraph (cyclomatic 17): txbody_to_svg._parse_paragraph 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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ae99a55adad3c4a5b50534ec54a1c71559b3437976183fbeda4549e17e90feb"}},{"ruleId":"D1","level":"warning","message":{"text":"txbody_to_svg._wrap_paragraph_into_lines (cyclomatic 17): txbody_to_svg._wrap_paragraph_into_lines 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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":1023}}}],"partialFingerprints":{"codehealthFindingId/v1":"30a2cdc0dddc4161786207e2818a572b6edec9ba7def76edfa75ee88e1841ea8"}},{"ruleId":"D1","level":"warning","message":{"text":"register_template._extract_entry (cyclomatic 17): register_template._extract_entry 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":"skills/ppt-master/scripts/register_template.py"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"f404fa7195883eab45f19f91e2fabe6ee6764c591933d5d90a77eb55f449d850"}},{"ruleId":"D1","level":"warning","message":{"text":"pdf_to_md.get_heading_level (cyclomatic 17): pdf_to_md.get_heading_level 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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"71923cc87551cc8ea26b9c07cefdaa097791c1d4cc4a410531eaa49b643b049c"}},{"ruleId":"D1","level":"warning","message":{"text":"web_to_md.main (cyclomatic 17): web_to_md.main 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":"skills/ppt-master/scripts/source_to_md/web_to_md.py"},"region":{"startLine":915}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f071aa10a782bf64113bc9140bd39dbc11b87ad589b8b0ec152f7bd0c49f0e4"}},{"ruleId":"D1","level":"warning","message":{"text":"annotations.promote_tspan_to_text (cyclomatic 17): annotations.promote_tspan_to_text 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":"skills/ppt-master/scripts/svg_editor/annotations.py"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"8edf51e53ed1f42f3a9ccd7c687e72fc48371f32cbb36cb7ff3cf3ab1efe7f06"}},{"ruleId":"D1","level":"warning","message":{"text":"server._validate_edit_attrs (cyclomatic 17): server._validate_edit_attrs 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":"skills/ppt-master/scripts/svg_editor/server.py"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"11b844e959965c18c7c2dd24d17d38e3dfedfb3b5f6855084b51cbd925773543"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_viewbox (cyclomatic 17): SVGQualityChecker._check_viewbox 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":1315}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bc5751f4f424340abc5e51e3b711fde7701bb2186c7ba89fef1baa47ebf9d26"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._apply_aggregated_issue_counts (cyclomatic 17): SVGQualityChecker._apply_aggregated_issue_counts 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6774}}}],"partialFingerprints":{"codehealthFindingId/v1":"f72e511cd9c80153f40caf8eba3e54aae8b892b9e7a081cf42aaf0fcdc16ce31"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_contracts.check_paint_compatibility (cyclomatic 17): svg_contracts.check_paint_compatibility 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bed28d96295542de26f0e941f395ac69d2b8c5e0fdc6c7b1f1cca85f6864b10"}},{"ruleId":"D1","level":"warning","message":{"text":"svg_contracts.check_font_size_values (cyclomatic 17): svg_contracts.check_font_size_values 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":1050}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5d2eb34bffb7eed2c0caac1e43b2dc02df300bf2fa9885e11dd7733bb4f377b"}},{"ruleId":"D1","level":"warning","message":{"text":"elements._valid_wmf_payload (cyclomatic 17): elements._valid_wmf_payload 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a0fabcd1875b5511af2251cc4bbc0fe4d9cb689ec3612853755fd0973c72980"}},{"ruleId":"D1","level":"warning","message":{"text":"elements.convert_rect (cyclomatic 17): elements.convert_rect 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1154}}}],"partialFingerprints":{"codehealthFindingId/v1":"68d88e730ac32e1b206709448ea6f4ab3ed867f90bf6a4cc11b60a6dc41e6cc2"}},{"ruleId":"D1","level":"warning","message":{"text":"utils._is_imported_preset_preview_filter_target (cyclomatic 17): utils._is_imported_preset_preview_filter_target 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2834}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f770a7f2a490d5ea3399adad97c09b80b8ce26b870bec70be4317893381410e"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_data._category_series (cyclomatic 17): chart_data._category_series 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31e1a12c7b75d5022d0ef41c10b20e72ea534bd9e672dc619912ddaef50c1d9"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_data._category_chart_data (cyclomatic 17): chart_data._category_chart_data 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":652}}}],"partialFingerprints":{"codehealthFindingId/v1":"b75337cbfca8bcf0ecc274466f0e8b51f07ba5f0ce28566eab4d0dbd39125f56"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_data._combo_plot_entry (cyclomatic 17): chart_data._combo_plot_entry 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b003eba16ad05521ad39ce1db0a5e876243f51d4687249b355cf6fb177e4c48"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_style._native_chart_export_payload (cyclomatic 17): chart_style._native_chart_export_payload 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"03205bd941103aee7e0027ba4851bb527482bdf3757a5c4bfc810372ff060a48"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_xml._data_labels_xml (cyclomatic 17): chart_xml._data_labels_xml 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"99f293d4533632463227240fb32f4c7db0ef932587f27f84ffca2c8b1b33435c"}},{"ruleId":"D1","level":"warning","message":{"text":"builder._prune_unreferenced_definition_payload_parts (cyclomatic 17): builder._prune_unreferenced_definition_payload_parts 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":3436}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cffa3e7acf24d43aeb79a867f98f5f53f28f78b42b345802f16d56ab3ec81c1"}},{"ruleId":"D1","level":"warning","message":{"text":"builder._prepare_flat_structure (cyclomatic 17): builder._prepare_flat_structure 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":3648}}}],"partialFingerprints":{"codehealthFindingId/v1":"7afa334f37d2530da8da2862aba4db896021494756542ffefbd30779c2967469"}},{"ruleId":"D1","level":"warning","message":{"text":"cli._source_resource_audit (cyclomatic 17): cli._source_resource_audit 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a25be6c995b880a227fd34478210400fe9231a562a6a572e599961d6e6d9b1f"}},{"ruleId":"D1","level":"warning","message":{"text":"edit_safety._chart_edit_capability (cyclomatic 17): edit_safety._chart_edit_capability 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":"skills/ppt-master/scripts/template_fill_pptx/edit_safety.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"45761fcbce403f3872d2c66ad2fa2d6b89b63ef29e73bbd3cab2ac23f7ae4a3a"}},{"ruleId":"D1","level":"warning","message":{"text":"validator._chart_tokens (cyclomatic 17): validator._chart_tokens 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":"skills/ppt-master/scripts/template_fill_pptx/validator.py"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"b04b72d9789529b08dd11883a670d11190cf9df3b3acbe0b7966ab3e6e37eca7"}},{"ruleId":"D1","level":"warning","message":{"text":"analyze_images.print_results (cyclomatic 16): analyze_images.print_results 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":"skills/ppt-master/scripts/analyze_images.py"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"02e05229a442a7a79f62ce6f1bbe1910db50967ea4cf9e92459b590cbad9230e"}},{"ruleId":"D1","level":"warning","message":{"text":"server._typography_error (cyclomatic 16): server._typography_error 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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a3589b3242f60d98a5edc7db974fb85b21018f0c76d7d687483119bb68ecde2"}},{"ruleId":"D1","level":"warning","message":{"text":"backend_gemini._generate_image (cyclomatic 16): backend_gemini._generate_image 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":"skills/ppt-master/scripts/image_backends/backend_gemini.py"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7c17bf503968cf3e0e94587ac0769b12fe53e1509ea14f3c922e3c09bae22bb"}},{"ruleId":"D1","level":"warning","message":{"text":"mirror_template_materialize._resolved_placeholder_decorations (cyclomatic 16): mirror_template_materialize._resolved_placeholder_decorations 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1837}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eabd95494bf5b60768214b4e35882af9029ffe2b47d502d31e97dc0e834829a"}},{"ruleId":"D1","level":"warning","message":{"text":"native_enhance_pptx_core.validate_project (cyclomatic 16): native_enhance_pptx_core.validate_project 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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":2179}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f15aa8c7af800a2284a6df87e57d60f776d76a6d657ca44c43ca3dcf849c6d5"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._resolved_shape_paint (cyclomatic 16): chart_to_svg._resolved_shape_paint 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":738}}}],"partialFingerprints":{"codehealthFindingId/v1":"be4de38b1fe05be53825ddd1f90d7c7ac820348d621ce37323b7a1adb4ff21e1"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_to_svg._data_labels_payload (cyclomatic 16): chart_to_svg._data_labels_payload 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":2062}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dae0764c02c868528efd50c4169b7c58492c8cef3e260b9a9eb2563e62e921c"}},{"ruleId":"D1","level":"warning","message":{"text":"ColorPalette._load_scheme (cyclomatic 16): ColorPalette._load_scheme 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":"skills/ppt-master/scripts/pptx_to_svg/color_resolver.py"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"9515c43faa4f26812e4184f376300cb0c112a8d2dcea5bc5de5a1e393617206b"}},{"ruleId":"D1","level":"warning","message":{"text":"ln_to_svg._build_arrow_marker (cyclomatic 16): ln_to_svg._build_arrow_marker 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":"skills/ppt-master/scripts/pptx_to_svg/ln_to_svg.py"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"759240e42725c8d77c9a789ac682df9a395b626cd3797f7a13901f94f98ca48d"}},{"ruleId":"D1","level":"warning","message":{"text":"normalized_chart_svg._render_category (cyclomatic 16): normalized_chart_svg._render_category 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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5cc2c112e2d9ca25ed6d618a20883b0f0f6d47b0b21c92b3c19424343afe5f9"}},{"ruleId":"D1","level":"warning","message":{"text":"normalized_chart_svg._render_pie (cyclomatic 16): normalized_chart_svg._render_pie 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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7db40bd7e2ae479d93e7bb63b40a7c9e016f35265a176e7a9968aec15314141"}},{"ruleId":"D1","level":"warning","message":{"text":"shape_walker._walk_container (cyclomatic 16): shape_walker._walk_container 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":"skills/ppt-master/scripts/pptx_to_svg/shape_walker.py"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"82a7ae26206e219611f7220e39090074b7af57fcc24a8790b907ce163f40771e"}},{"ruleId":"D1","level":"warning","message":{"text":"slide_to_svg.assemble_slide (cyclomatic 16): slide_to_svg.assemble_slide 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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"683d578d8dddd9853a7a366c2f04e4616d0703ca8b3bd1cf9f2160ca73d2bfe0"}},{"ruleId":"D1","level":"warning","message":{"text":"tbl_to_svg._build_cell_grid (cyclomatic 16): tbl_to_svg._build_cell_grid 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f1ebc5dcc8ce359621edcfdbd4f04b5ddb55b883894a77e0023d7b8ad12c9c5"}},{"ruleId":"D1","level":"warning","message":{"text":"txbody_to_svg.convert_vertical_txbody (cyclomatic 16): txbody_to_svg.convert_vertical_txbody 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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"335f635f43386fee50e22a4fa0492bdcc82adb034c983db2a8bdbc6cbad1bb28"}},{"ruleId":"D1","level":"warning","message":{"text":"txbody_to_svg._emit_paragraph (cyclomatic 16): txbody_to_svg._emit_paragraph 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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":1185}}}],"partialFingerprints":{"codehealthFindingId/v1":"51950e3f1975e77ab1b4f7ee479fd88bbfb6d12d02a3aaaa43ae61e115e05ad3"}},{"ruleId":"D1","level":"warning","message":{"text":"prompt_audit.render_text (cyclomatic 16): prompt_audit.render_text 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1690}}}],"partialFingerprints":{"codehealthFindingId/v1":"58097492f3b2b6904dd1fc023b2cc837815a909649bc11c05f82e7df63883064"}},{"ruleId":"D1","level":"warning","message":{"text":"flatten_tspan._emit_mergeable_paragraph (cyclomatic 16): flatten_tspan._emit_mergeable_paragraph has cyclomatic complexity 16 (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":"skills/ppt-master/scripts/svg_finalize/flatten_tspan.py"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6c65bb9423f6db73f84d5a153898dd8ccfbaa27496c05d79dc4713a9c2d17a4"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._resolved_single_line_text_runs (cyclomatic 16): SVGQualityChecker._resolved_single_line_text_runs 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":1607}}}],"partialFingerprints":{"codehealthFindingId/v1":"4790846e4de4c9a76e76c24c64984dadbae63f8e68bc881863234eab242d7693"}},{"ruleId":"D1","level":"warning","message":{"text":"SVGQualityChecker._check_pattern_fills (cyclomatic 16): SVGQualityChecker._check_pattern_fills 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3424}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d91ea6b18c774fbfd041649fcc7af8f1df81be4e5392cdc2c9f4f57e946b756"}},{"ruleId":"D1","level":"warning","message":{"text":"animation_config._resolve_morph_pairs (cyclomatic 16): animation_config._resolve_morph_pairs 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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd50671a82d60f1814d85bcc49a732a8541d1afc074a7d18e0320e2e5f1d407d"}},{"ruleId":"D1","level":"warning","message":{"text":"elements.convert_image (cyclomatic 16): elements.convert_image 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":4265}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc8fb966b82fba17870d1bcfc5e281b9eff01499b26672add60f7bbb920e7fa7"}},{"ruleId":"D1","level":"warning","message":{"text":"paths._project_path_like_bounds (cyclomatic 16): paths._project_path_like_bounds 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"51cff77ff514301dad5269770c277559e5d8aa7d36c8afd29300fbbc35c5d0a3"}},{"ruleId":"D1","level":"warning","message":{"text":"styles.build_stroke_xml (cyclomatic 16): styles.build_stroke_xml 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/styles.py"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"4db2934103cd42505f37a57bf4860978f078ecffb21ffb564543b0c396099302"}},{"ruleId":"D1","level":"warning","message":{"text":"theme_fonts.apply_master_text_style_spec (cyclomatic 16): theme_fonts.apply_master_text_style_spec 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/theme_fonts.py"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"f41fdde602ad1d96d55aef4626785dbc8c1c2732e16d5166be8acef92e33534f"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.is_picture_effect_carrier (cyclomatic 16): utils.is_picture_effect_carrier 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2904}}}],"partialFingerprints":{"codehealthFindingId/v1":"a33fd5eb9ff2a9006fcf95d925dd7e63005f4154731cc416c6b0fe1c167e0f6e"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_data._xy_chart_data (cyclomatic 16): chart_data._xy_chart_data 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":1203}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8f4ed808a9c74303b320f8136251005f196c5d3949a183fe0b141ef7a6aa870"}},{"ruleId":"D1","level":"warning","message":{"text":"chart_style._chart_companion_text_xml (cyclomatic 16): chart_style._chart_companion_text_xml 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py"},"region":{"startLine":800}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffbbe91eed027a739b529a34be1f374014a50d8980f4c0e175189ebafd054f6d"}},{"ruleId":"D1","level":"warning","message":{"text":"marker_common._fallback_fill_candidates (cyclomatic 16): marker_common._fallback_fill_candidates 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"76a7cea574970e01f58f00829ba1d3ffd5138fb81b935e3a008c7900a6f23f6a"}},{"ruleId":"D1","level":"warning","message":{"text":"table._table_cell_paragraphs (cyclomatic 16): table._table_cell_paragraphs 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"a01b54fe065a5c7faab9316f593e9f18c18b5b0a736aabf1631af305766261fd"}},{"ruleId":"D1","level":"warning","message":{"text":"cli._write_postflight_report (cyclomatic 16): cli._write_postflight_report 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"17283ad64a2def2f79e6ea7d9c1d3fc277d3ca18a09ee592b079a852d9aa9342"}},{"ruleId":"D1","level":"warning","message":{"text":"template_structure._is_full_canvas_solid_rect (cyclomatic 16): template_structure._is_full_canvas_solid_rect 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cfb1dbf8ca29d024378a57ea11e23be0f444008cbd2c13dae4c0315b4b824b0"}},{"ruleId":"D1","level":"warning","message":{"text":"template_structure._scope_visual_resources_signature (cyclomatic 16): template_structure._scope_visual_resources_signature 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":2521}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c33791860a7bb7a545873d5be3972f26656d2dc3982c0c6e753f10fd529dbdd"}},{"ruleId":"D1","level":"warning","message":{"text":"diagram_read._ordered_nodes (cyclomatic 16): diagram_read._ordered_nodes 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":"skills/ppt-master/scripts/template_fill_pptx/diagram_read.py"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"33ca4695150ea344cb3774c2dade6beb524daa149547e6d7fa549bf4e4b78820"}},{"ruleId":"D1","level":"warning","message":{"text":"validator._replacement_tokens (cyclomatic 16): validator._replacement_tokens 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":"skills/ppt-master/scripts/template_fill_pptx/validator.py"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"5069eed41dfebb0bc0a5a7006df68cf7497e1d699409b0eed97b06a1f8183a03"}},{"ruleId":"D1","level":"warning","message":{"text":"validator.validate_project (cyclomatic 16): validator.validate_project 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":"skills/ppt-master/scripts/template_fill_pptx/validator.py"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"45ad846bbb4a0e6d9fb884badf33a45cff5b7fc76a1292cb35fd29843e4bdf7b"}},{"ruleId":"D2","level":"warning","message":{"text":"builder.create_pptx_with_native_svg (cognitive 452): builder.create_pptx_with_native_svg has cognitive complexity 452 (threshold 15). Drivers by points: if/else 268, ternaries 68, loops 57, boolean chains 48, error handling 11 (nesting depth added 220). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":4639}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c9c184be874c6cc2997557d7588b38af22d9f65487bb875091fe98b1f48a1a8"}},{"ruleId":"D2","level":"warning","message":{"text":"cli.main (cognitive 305): cli.main has cognitive complexity 305 (threshold 15). Drivers by points: if/else 169, ternaries 37, boolean chains 34, error handling 34, loops 31 (nesting depth added 115). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c02bc8f4e82e131ae4dd1542c87cc0fc87edfa8c48bc0d75e2d7d2a765e03a3"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md.extract_pdf_to_markdown (cognitive 239): pdf_to_md.extract_pdf_to_markdown has cognitive complexity 239 (threshold 15). Drivers by points: if/else 158, loops 30, ternaries 30, error handling 11, boolean chains 10 (nesting depth added 163). 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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":1331}}}],"partialFingerprints":{"codehealthFindingId/v1":"4df34a5d0626521c31dceb3b2ed07a045835173ef8ab4139242b700df00b8ae5"}},{"ruleId":"D2","level":"warning","message":{"text":"template_validation.validate_pptx_template_package (cognitive 217): template_validation.validate_pptx_template_package has cognitive complexity 217 (threshold 15). Drivers by points: if/else 154, boolean chains 20, loops 19, ternaries 18, error handling 6 (nesting depth added 114). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_validation.py"},"region":{"startLine":866}}}],"partialFingerprints":{"codehealthFindingId/v1":"63f80a2144f3c2583593cddaa823a968e6ae4bb49b109f30f167a9ccd3289510"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure.parse_template_slide (cognitive 216): template_structure.parse_template_slide has cognitive complexity 216 (threshold 15). Drivers by points: if/else 136, boolean chains 53, loops 13, ternaries 11, error handling 3 (nesting depth added 89). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1303}}}],"partialFingerprints":{"codehealthFindingId/v1":"521ebed650c98b9f0a5bb0f325b12e17d8180fad4645b913b6cca2b61ecdbd3e"}},{"ruleId":"D2","level":"warning","message":{"text":"checker.check_plan (cognitive 159): checker.check_plan has cognitive complexity 159 (threshold 15). Drivers by points: if/else 77, ternaries 48, boolean chains 17, loops 17 (nesting depth added 91). 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":"skills/ppt-master/scripts/template_fill_pptx/checker.py"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"9af87db4847a8a4e92ce197cdb2a1fdb50f3d1c2fc17adfd62efea7ea71dd680"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_planned_image_closure (cognitive 147): SVGQualityChecker._check_planned_image_closure has cognitive complexity 147 (threshold 15). Drivers by points: if/else 75, loops 29, boolean chains 25, ternaries 10, error handling 8 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":5642}}}],"partialFingerprints":{"codehealthFindingId/v1":"02197f334a4c2cec78130e2917ae832e76f90de54dce39a06eb3d4b1d6f94cda"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure.load_pptx_structure_lock (cognitive 146): template_structure.load_pptx_structure_lock has cognitive complexity 146 (threshold 15). Drivers by points: if/else 106, boolean chains 23, loops 9, ternaries 7, error handling 1 (nesting depth added 51). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"f514adbc7e9f71d19cad7d6a20453ed8d95b9fc15214c6e15c73b03892fccaf7"}},{"ruleId":"D2","level":"warning","message":{"text":"elements.convert_text (cognitive 142): elements.convert_text has cognitive complexity 142 (threshold 15). Drivers by points: if/else 73, ternaries 32, boolean chains 30, loops 7 (nesting depth added 45). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":2646}}}],"partialFingerprints":{"codehealthFindingId/v1":"c051051f7f4441773f1c8a8100ceaaeb030bab4ed777c040ff2b81fe04f7eec9"}},{"ruleId":"D2","level":"warning","message":{"text":"checker._local_pptx_structure_errors (cognitive 130): checker._local_pptx_structure_errors has cognitive complexity 130 (threshold 15). Drivers by points: if/else 107, boolean chains 21, loops 2 (nesting depth added 68). 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"471c6d7017a4b7bee4f866ccaf0fdaaaa5c684e802ba24ccbce4105c2371a43d"}},{"ruleId":"D2","level":"warning","message":{"text":"image_gen.load_manifest (cognitive 123): image_gen.load_manifest has cognitive complexity 123 (threshold 15). Drivers by points: if/else 83, boolean chains 16, loops 13, ternaries 10, error handling 1 (nesting depth added 59). 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":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3331c62ced98bc9496e03d926c97540812ddfda9c888d3ef0e0f229c1bcedf7"}},{"ruleId":"D2","level":"warning","message":{"text":"table._build_native_table (cognitive 122): table._build_native_table has cognitive complexity 122 (threshold 15). Drivers by points: ternaries 65, if/else 32, boolean chains 18, loops 7 (nesting depth added 69). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py"},"region":{"startLine":867}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac69a54844aee44174a2b0f6518b18957597abf930ee705a7e713b141017ef80"}},{"ruleId":"D2","level":"warning","message":{"text":"prompt_audit.audit_registries (cognitive 117): prompt_audit.audit_registries has cognitive complexity 117 (threshold 15). Drivers by points: if/else 69, loops 37, ternaries 6, boolean chains 5 (nesting depth added 76). 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1103}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc69aefed4eb18aa1fe763baadcb1ea055adaabb6bdaccafb377c00bf63adb54"}},{"ruleId":"D2","level":"warning","message":{"text":"manifest.build_manifest (cognitive 115): manifest.build_manifest has cognitive complexity 115 (threshold 15). Drivers by points: if/else 63, loops 25, ternaries 15, boolean chains 12 (nesting depth added 48). 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":"skills/ppt-master/scripts/template_import/manifest.py"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"179d1d1cce31a5df008531dad5ad3c3353b8d01104896b0c5145a445ed484278"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_spec_lock_alignment (cognitive 114): SVGQualityChecker._check_spec_lock_alignment has cognitive complexity 114 (threshold 15). Drivers by points: if/else 77, loops 21, boolean chains 10, ternaries 6 (nesting depth added 52). 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":4170}}}],"partialFingerprints":{"codehealthFindingId/v1":"987caac8cb9563a5c42472d207e5e151dcfb08dd82485fccdc3654bf3033d7c3"}},{"ruleId":"D2","level":"warning","message":{"text":"ppt_to_md.convert_presentation_to_markdown (cognitive 113): ppt_to_md.convert_presentation_to_markdown has cognitive complexity 113 (threshold 15). Drivers by points: if/else 83, loops 10, ternaries 9, error handling 7, boolean chains 4 (nesting depth added 66). 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":"skills/ppt-master/scripts/source_to_md/ppt_to_md.py"},"region":{"startLine":1006}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f6adc4484a7c6595503ad18a289a527fcd61a69577f93088b9530c5b804ddfa"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectManager.import_sources (cognitive 108): ProjectManager.import_sources has cognitive complexity 108 (threshold 15). Drivers by points: if/else 77, error handling 21, boolean chains 7, loops 3 (nesting depth added 57). 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":"skills/ppt-master/scripts/project_management/cli.py"},"region":{"startLine":739}}}],"partialFingerprints":{"codehealthFindingId/v1":"73b617618968b518c5e2f893b3c5264dd44b5feb76922931b7d1eac0701389e7"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure.template_prototype_errors (cognitive 101): template_structure.template_prototype_errors has cognitive complexity 101 (threshold 15). Drivers by points: if/else 62, ternaries 21, error handling 9, boolean chains 8, loops 1 (nesting depth added 51). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":2951}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf833b942ddf7b798a62eec4c2ef1221680d8e2280eccd14f810ebcc7a1a7b78"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._promote_common_chrome_shapes_to_masters (cognitive 100): builder._promote_common_chrome_shapes_to_masters has cognitive complexity 100 (threshold 15). Drivers by points: if/else 64, loops 34, boolean chains 2 (nesting depth added 59). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":3006}}}],"partialFingerprints":{"codehealthFindingId/v1":"75eac808ab97a714fcea126fd84b1e60e7b0fd19dce208ad740ab67dda4795a1"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.project_marker_errors (cognitive 95): utils.project_marker_errors has cognitive complexity 95 (threshold 15). Drivers by points: if/else 65, boolean chains 12, loops 7, ternaries 6, error handling 5 (nesting depth added 58). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1990}}}],"partialFingerprints":{"codehealthFindingId/v1":"40dcfbebdac72f425f01b9bb7eac79182535577a7e5f8fb554115e1b13f0796c"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.project_filter_errors (cognitive 95): utils.project_filter_errors has cognitive complexity 95 (threshold 15). Drivers by points: if/else 64, boolean chains 12, error handling 7, loops 7, ternaries 5 (nesting depth added 52). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2648}}}],"partialFingerprints":{"codehealthFindingId/v1":"87d0772e2e1e33a6e1db46d9b7f5dd0fc93412e32f599bf8f3f14e6e358838e2"}},{"ruleId":"D2","level":"warning","message":{"text":"project_specs._validate_section (cognitive 91): project_specs._validate_section has cognitive complexity 91 (threshold 15). Drivers by points: if/else 60, loops 19, boolean chains 7, error handling 5 (nesting depth added 48). 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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"59594e667096c2f09ded694e85d6b925296af8279b30b293bf60dd310ea36d44"}},{"ruleId":"D2","level":"warning","message":{"text":"ln_to_svg.resolve_stroke (cognitive 89): ln_to_svg.resolve_stroke has cognitive complexity 89 (threshold 15). Drivers by points: if/else 61, boolean chains 13, error handling 6, loops 6, ternaries 3 (nesting depth added 31). 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":"skills/ppt-master/scripts/pptx_to_svg/ln_to_svg.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"332de0b946e7cb6cb5c9a9d15cbd89284cf43f066416aa84c3d3fd11446acc19"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.project_gradient_errors (cognitive 87): utils.project_gradient_errors has cognitive complexity 87 (threshold 15). Drivers by points: if/else 48, error handling 11, loops 11, boolean chains 9, ternaries 8 (nesting depth added 49). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2327}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e0a9caf483650b38742806b76938571fb6a1a9f0608962bf8ae59f5d29b5bf8"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._load_native_animations (cognitive 86): pptx_animations._load_native_animations has cognitive complexity 86 (threshold 15). Drivers by points: if/else 65, error handling 8, loops 7, boolean chains 6 (nesting depth added 50). 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc0a535af40bef9394982de15c723bd4d76b07f2102d8d5122366539fe38ab39"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._read_effect_options (cognitive 85): pptx_animations._read_effect_options has cognitive complexity 85 (threshold 15). Drivers by points: if/else 48, ternaries 12, loops 10, boolean chains 8, error handling 7 (nesting depth added 48). 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":2382}}}],"partialFingerprints":{"codehealthFindingId/v1":"062f8f0a1eb4c22ea74ca73cad811992c7be220b7d6b7525095b7eaf44e026dc"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations.validate_slide_animation_structure (cognitive 85): pptx_animations.validate_slide_animation_structure has cognitive complexity 85 (threshold 15). Drivers by points: if/else 63, boolean chains 11, loops 9, ternaries 2 (nesting depth added 30). 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":3033}}}],"partialFingerprints":{"codehealthFindingId/v1":"17e4cb2399c3310613680e9afbd034f84fc5c78e50006daddfac3183d7a66902"}},{"ruleId":"D2","level":"warning","message":{"text":"cli.main (cognitive 82): cli.main has cognitive complexity 82 (threshold 15). Drivers by points: if/else 42, loops 30, ternaries 8, boolean chains 1, error handling 1 (nesting depth added 40). 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":"skills/ppt-master/scripts/project_management/cli.py"},"region":{"startLine":1147}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fbf40cabbd4a5a379b1f13028b534c552a955ca80eeaa830f706f330c6230b4"}},{"ruleId":"D2","level":"warning","message":{"text":"narration_sync.rebuild_animations (cognitive 81): narration_sync.rebuild_animations has cognitive complexity 81 (threshold 15). Drivers by points: if/else 59, loops 9, ternaries 8, boolean chains 5 (nesting depth added 40). 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":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":956}}}],"partialFingerprints":{"codehealthFindingId/v1":"318c4ddf22512806f339471013a5c2d8c7deb3ead1d82de10c133fe3671587a8"}},{"ruleId":"D2","level":"warning","message":{"text":"elements._parse_preset_geometry_metadata (cognitive 78): elements._parse_preset_geometry_metadata has cognitive complexity 78 (threshold 15). Drivers by points: if/else 53, boolean chains 13, error handling 7, loops 5 (nesting depth added 30). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0bd076372eb5cdfdb5af8b1410d9c6f3d996b2f2d0a7750f88f0f79e264f5e7"}},{"ruleId":"D2","level":"warning","message":{"text":"converter.convert_g (cognitive 76): converter.convert_g has cognitive complexity 76 (threshold 15). Drivers by points: if/else 44, boolean chains 21, ternaries 9, loops 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"42be669361a56f14d960f48a29733e786616078c40035d709b2789f6817d10b5"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._axis_config_from_xml (cognitive 75): chart_to_svg._axis_config_from_xml has cognitive complexity 75 (threshold 15). Drivers by points: if/else 56, boolean chains 14, loops 3, ternaries 2 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1071}}}],"partialFingerprints":{"codehealthFindingId/v1":"533d4e2cc59c8953ac1f35547c776430ebf9df5b7d52ade53f3830648a21cb39"}},{"ruleId":"D2","level":"warning","message":{"text":"converter.convert_svg_to_slide_shapes (cognitive 75): converter.convert_svg_to_slide_shapes has cognitive complexity 75 (threshold 15). Drivers by points: if/else 43, boolean chains 13, error handling 9, ternaries 9, loops 1 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":1372}}}],"partialFingerprints":{"codehealthFindingId/v1":"332a8b9401f4a92b97cb1de2b0af7d522de9a43063931a38b103453d352e9c7c"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._promote_common_chrome_shapes_to_layouts (cognitive 72): builder._promote_common_chrome_shapes_to_layouts has cognitive complexity 72 (threshold 15). Drivers by points: if/else 42, loops 26, boolean chains 4 (nesting depth added 40). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1423}}}],"partialFingerprints":{"codehealthFindingId/v1":"66adcc654298af3ad7bc04b478fae33457914b54f3fb178ca6ab88a350e81108"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._build_sequence_targets (cognitive 72): builder._build_sequence_targets has cognitive complexity 72 (threshold 15). Drivers by points: if/else 46, ternaries 13, boolean chains 9, loops 4 (nesting depth added 33). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":4126}}}],"partialFingerprints":{"codehealthFindingId/v1":"585ea0b19a2f3df2beb298bb74aa193173d43409c21ad3c495f87f1d44525c84"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations.validate_generated_animation_xml (cognitive 67): pptx_animations.validate_generated_animation_xml has cognitive complexity 67 (threshold 15). Drivers by points: if/else 49, ternaries 12, loops 3, boolean chains 2, error handling 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":3299}}}],"partialFingerprints":{"codehealthFindingId/v1":"30174e8176c3fb78d4c91769df9d81d69b877e88cdcb3f497916979f1d9dfe33"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_native_object_markers (cognitive 67): SVGQualityChecker._check_native_object_markers has cognitive complexity 67 (threshold 15). Drivers by points: if/else 28, loops 15, error handling 9, boolean chains 8, ternaries 7 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3489}}}],"partialFingerprints":{"codehealthFindingId/v1":"b42b43a5b5f0355b262779567983ba5afa0786cb37b2af4d16840896f371b559"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker.check_directory (cognitive 64): SVGQualityChecker.check_directory has cognitive complexity 64 (threshold 15). Drivers by points: if/else 35, error handling 10, ternaries 9, boolean chains 6, loops 4 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":4700}}}],"partialFingerprints":{"codehealthFindingId/v1":"36c24caec74221621b6d7b3b9650f2c938757c676b2da393bc21c3cf22d1ee5d"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_data._chart_axes (cognitive 64): chart_data._chart_axes has cognitive complexity 64 (threshold 15). Drivers by points: if/else 52, boolean chains 5, loops 5, ternaries 2 (nesting depth added 33). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"487b44ffd913b87b8ad94567b06321533146e09578f263d8a406850bc80eb359"}},{"ruleId":"D2","level":"warning","message":{"text":"finalize_svg._process_candidate_directory (cognitive 63): finalize_svg._process_candidate_directory has cognitive complexity 63 (threshold 15). Drivers by points: if/else 43, loops 11, error handling 8, boolean chains 1 (nesting depth added 31). 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":"skills/ppt-master/scripts/finalize_svg.py"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"59019aa194375671012a7ff833ffeac21b1641e52da87c4892983bbd8871d5c3"}},{"ruleId":"D2","level":"warning","message":{"text":"flatten_tspan.flatten_text_with_tspans (cognitive 63): flatten_tspan.flatten_text_with_tspans has cognitive complexity 63 (threshold 15). Drivers by points: if/else 43, loops 9, boolean chains 6, error handling 3, ternaries 2 (nesting depth added 33). 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":"skills/ppt-master/scripts/svg_finalize/flatten_tspan.py"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"f77a584d3f4fad15ecab6ea43f66981a6a9b39c9e8ddb0f331a278175facb6cb"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_template_contract (cognitive 63): SVGQualityChecker._check_template_contract has cognitive complexity 63 (threshold 15). Drivers by points: if/else 42, loops 9, error handling 5, boolean chains 4, ternaries 3 (nesting depth added 31). 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6226}}}],"partialFingerprints":{"codehealthFindingId/v1":"913e0b4591bb9115c8825dd14ed2d430a8912d60f0e010859366624aae431e3b"}},{"ruleId":"D2","level":"warning","message":{"text":"animation_config.validate_animation_config (cognitive 63): animation_config.validate_animation_config has cognitive complexity 63 (threshold 15). Drivers by points: if/else 45, loops 13, error handling 3, boolean chains 2 (nesting depth added 32). 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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":1255}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a493aa5f370b45b13e75a6e961368a05453bfee97466fa3b69d21034d66cc0"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_contracts.check_stroke_style_values (cognitive 60): svg_contracts.check_stroke_style_values has cognitive complexity 60 (threshold 15). Drivers by points: if/else 41, error handling 9, ternaries 5, boolean chains 3, loops 2 (nesting depth added 37). 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"f286694070a43f6a5ea73133efc2d90fa11591a972bbd359bbbe15bd1b6ababe"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._validate_chart_semantics (cognitive 59): chart_to_svg._validate_chart_semantics has cognitive complexity 59 (threshold 15). Drivers by points: if/else 44, loops 7, boolean chains 5, ternaries 3 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1597}}}],"partialFingerprints":{"codehealthFindingId/v1":"952f530e78df12ba650e00d68f9e0c29730e9278988e80fe67a9c5c758f80f0c"}},{"ruleId":"D2","level":"warning","message":{"text":"image_search.main (cognitive 58): image_search.main has cognitive complexity 58 (threshold 15). Drivers by points: if/else 21, ternaries 15, error handling 13, boolean chains 9 (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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":1934}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc542557f61cb515441f21f66defcef23db255045972e571b7b285be0688c1f0"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._apply_chart_metadata (cognitive 57): chart_to_svg._apply_chart_metadata has cognitive complexity 57 (threshold 15). Drivers by points: if/else 44, ternaries 6, loops 4, boolean chains 3 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1738}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c90d8103adb9bbce791206fc76c0dbe3cfe0c659967129d319464dd3a28af10"}},{"ruleId":"D2","level":"warning","message":{"text":"project_specs.validate_markdown_schema (cognitive 57): project_specs.validate_markdown_schema has cognitive complexity 57 (threshold 15). Drivers by points: if/else 46, loops 5, boolean chains 3, ternaries 2, error handling 1 (nesting depth added 24). 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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":1094}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c64880913807187028a269322e0b06f28db18e7b666a5939b13c638742e681a"}},{"ruleId":"D2","level":"warning","message":{"text":"crop_images.process_svg_images (cognitive 57): crop_images.process_svg_images has cognitive complexity 57 (threshold 15). Drivers by points: if/else 44, error handling 5, ternaries 4, boolean chains 3, loops 1 (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":"skills/ppt-master/scripts/svg_finalize/crop_images.py"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"62ad787aace4978b856505e0d4ee5eb4d35f98c7dd1095ac4570877334ffe2ac"}},{"ruleId":"D2","level":"warning","message":{"text":"fix_image_aspect.fix_image_aspect_in_svg (cognitive 57): fix_image_aspect.fix_image_aspect_in_svg has cognitive complexity 57 (threshold 15). Drivers by points: if/else 32, ternaries 13, boolean chains 4, error handling 4, loops 4 (nesting depth added 32). 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":"skills/ppt-master/scripts/svg_finalize/fix_image_aspect.py"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"71ebe317fe7db3e9f38dd768a4cb119d22e6c6b8ab53fbc31ab9a56804f72af3"}},{"ruleId":"D2","level":"warning","message":{"text":"flatten_tspan._classify_paragraph_block (cognitive 57): flatten_tspan._classify_paragraph_block has cognitive complexity 57 (threshold 15). Drivers by points: if/else 39, ternaries 9, boolean chains 6, loops 3 (nesting depth added 22). 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":"skills/ppt-master/scripts/svg_finalize/flatten_tspan.py"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"e64939481d8bfdbe969d28ea7b5f58f86ad46b02426cd4b5cb9793dbdf205507"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._apply_explicit_layout_structure (cognitive 57): builder._apply_explicit_layout_structure has cognitive complexity 57 (threshold 15). Drivers by points: if/else 38, loops 17, ternaries 2 (nesting depth added 31). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":2722}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fdc339070bb5775531931ee41d8a225c22c20c4dcfccb29e2c2012b801b358d"}},{"ruleId":"D2","level":"warning","message":{"text":"normalized_chart_svg._render_xy (cognitive 56): normalized_chart_svg._render_xy has cognitive complexity 56 (threshold 15). Drivers by points: ternaries 19, boolean chains 17, if/else 16, loops 4 (nesting depth added 20). 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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"fff91581dbb2c68984466bc58b2b72151076d00c275ac1ad34c61bac9eb4c168"}},{"ruleId":"D2","level":"warning","message":{"text":"project_specs._validate_condition (cognitive 56): project_specs._validate_condition has cognitive complexity 56 (threshold 15). Drivers by points: if/else 42, loops 13, boolean chains 1 (nesting depth added 32). 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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a8a23ae9dca9a1d05361679825eb874c300394fcaacc8d057521850e104e9a0"}},{"ruleId":"D2","level":"warning","message":{"text":"prompt_audit.load_manifest (cognitive 56): prompt_audit.load_manifest has cognitive complexity 56 (threshold 15). Drivers by points: if/else 28, boolean chains 15, loops 6, ternaries 6, error handling 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b3e6fb360330417cce715e15ba13bc1ff7403e485459bc353a8220327a596d3"}},{"ruleId":"D2","level":"warning","message":{"text":"slice_images.slice_sheet (cognitive 56): slice_images.slice_sheet has cognitive complexity 56 (threshold 15). Drivers by points: if/else 34, ternaries 9, loops 7, 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":"skills/ppt-master/scripts/slice_images.py"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae05c572cd22c561366733544fa5e6262d46aeb7a8c382d166cc30cf5e0ea762"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_image_references (cognitive 56): SVGQualityChecker._check_image_references has cognitive complexity 56 (threshold 15). Drivers by points: if/else 30, error handling 12, boolean chains 11, ternaries 2, loops 1 (nesting depth added 24). 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2702}}}],"partialFingerprints":{"codehealthFindingId/v1":"f514416b479a48fe6b081fd7fba34f5c5f2a41a91d4a2c2d481d20cfcbe0229f"}},{"ruleId":"D2","level":"warning","message":{"text":"checker._compact_preset_ancestor_paint (cognitive 56): checker._compact_preset_ancestor_paint has cognitive complexity 56 (threshold 15). Drivers by points: if/else 29, loops 12, boolean chains 10, error handling 5 (nesting depth added 30). 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c1f4ed755157dda1d1cc8cd442f94ed4f94300c117c704bd33a65c4bc54eb95"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure.load_native_structure_contract (cognitive 56): template_structure.load_native_structure_contract has cognitive complexity 56 (threshold 15). Drivers by points: if/else 30, boolean chains 13, error handling 6, ternaries 4, loops 3 (nesting depth added 17). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1028}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f8adfc56b05c4fe4ad1cd83b125ca830dd05d91806fa8bb4903bf1e6bfb2af2"}},{"ruleId":"D2","level":"warning","message":{"text":"notes_to_audio.main (cognitive 55): notes_to_audio.main has cognitive complexity 55 (threshold 15). Drivers by points: if/else 28, error handling 19, boolean chains 4, loops 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":"skills/ppt-master/scripts/notes_to_audio.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"89f02052b02f9ff9dcf75ca0b578eb85eb57d835dd2c085b5f1e2188f809dd8e"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_delivery_check.audit_pptx_delivery (cognitive 55): pptx_delivery_check.audit_pptx_delivery has cognitive complexity 55 (threshold 15). Drivers by points: if/else 34, boolean chains 8, ternaries 6, error handling 5, loops 2 (nesting depth added 4). 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":"skills/ppt-master/scripts/pptx_delivery_check.py"},"region":{"startLine":720}}}],"partialFingerprints":{"codehealthFindingId/v1":"e130afaa5a3cecde73084da241a847fb5094111cb0e0a234ffeb9ea1a32ef2ab"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg.convert_tbl (cognitive 55): tbl_to_svg.convert_tbl has cognitive complexity 55 (threshold 15). Drivers by points: if/else 23, boolean chains 14, loops 12, ternaries 6 (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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac73f2854ce629e0550d242e7e0cda9449f834fd77486b40973e2d718306d21b"}},{"ruleId":"D2","level":"warning","message":{"text":"normalized_chart_svg._render_bars (cognitive 54): normalized_chart_svg._render_bars has cognitive complexity 54 (threshold 15). Drivers by points: ternaries 31, if/else 17, boolean chains 3, loops 3 (nesting depth added 34). 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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"6790b1644b56ae8ee4ce98275b17a68169ca23757cd88f067f81619df6c474fe"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._table_has_unsupported_direct_formatting (cognitive 54): tbl_to_svg._table_has_unsupported_direct_formatting has cognitive complexity 54 (threshold 15). Drivers by points: if/else 43, error handling 5, loops 4, boolean chains 2 (nesting depth added 35). 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":882}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31985d9986951287a046471cc50b48bc58d20c633e92baf899e61f8d6a39476"}},{"ruleId":"D2","level":"warning","message":{"text":"animation_config._animation_parameter_errors (cognitive 54): animation_config._animation_parameter_errors has cognitive complexity 54 (threshold 15). Drivers by points: if/else 30, boolean chains 11, error handling 8, loops 5 (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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cae7772c05973c0805e2fc6bee6981906304fcb97f34246f3e1abdf98853ea1"}},{"ruleId":"D2","level":"warning","message":{"text":"narration_sync._resolve_animation_groups (cognitive 53): narration_sync._resolve_animation_groups has cognitive complexity 53 (threshold 15). Drivers by points: if/else 36, loops 9, boolean chains 6, ternaries 2 (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":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":717}}}],"partialFingerprints":{"codehealthFindingId/v1":"05f53cabc743d7b57a95ca7de5a4ae9d24f5d5a147c51ec3b2722bd3acb36048"}},{"ruleId":"D2","level":"warning","message":{"text":"native_enhance_pptx_core.apply_project (cognitive 53): native_enhance_pptx_core.apply_project has cognitive complexity 53 (threshold 15). Drivers by points: if/else 30, boolean chains 11, ternaries 6, error handling 5, loops 1 (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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1833}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfe8de0ee9839062eee8b961dc24f762a7ee7881b8e5e2a72e02e1575ed4f472"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._text_body_has_unsupported_formatting (cognitive 53): tbl_to_svg._text_body_has_unsupported_formatting has cognitive complexity 53 (threshold 15). Drivers by points: if/else 36, boolean chains 12, loops 5 (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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":951}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc41630c5a87de595c80ece2aecec929c7b7c711abf48bc429810fe0034a31bd"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_data._combo_chart_data (cognitive 53): chart_data._combo_chart_data has cognitive complexity 53 (threshold 15). Drivers by points: if/else 34, boolean chains 7, ternaries 7, loops 5 (nesting depth added 20). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":872}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2e4ce26cd3ce55e7e6f8c8b68e76ecc200e288a8a4228fec050b676fd649f83"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_position_calculator.main (cognitive 52): svg_position_calculator.main has cognitive complexity 52 (threshold 15). Drivers by points: if/else 24, ternaries 15, loops 7, error handling 4, boolean chains 2 (nesting depth added 31). 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":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":1296}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea6ddb279d2c691f69252ce8c1d8647c260dc9e66604eced0dcce4183c416991"}},{"ruleId":"D2","level":"warning","message":{"text":"project_specs._validate_spec_lock_relations (cognitive 51): project_specs._validate_spec_lock_relations has cognitive complexity 51 (threshold 15). Drivers by points: if/else 39, loops 7, boolean chains 3, error handling 2 (nesting depth added 24). 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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":952}}}],"partialFingerprints":{"codehealthFindingId/v1":"233f3404f5184cac4bf693cf69d1434299377ff59c2f2a5be34d7479086c989a"}},{"ruleId":"D2","level":"warning","message":{"text":"native_payloads.hydrate_native_payload_refs (cognitive 50): native_payloads.hydrate_native_payload_refs has cognitive complexity 50 (threshold 15). Drivers by points: if/else 40, boolean chains 7, loops 3 (nesting depth added 25). 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":"skills/ppt-master/scripts/native_payloads.py"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"789e3fff61dd1c21649f36d8849d0251d77ae5f6be4b47446da490a38ea3b452"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._combo_payload (cognitive 50): chart_to_svg._combo_payload has cognitive complexity 50 (threshold 15). Drivers by points: if/else 37, loops 7, boolean chains 4, ternaries 2 (nesting depth added 20). 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9a298ee1d33d211936a7adc528180df263c52ee6c6cce48da5c45d539e607c9"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._validate_stock_semantics (cognitive 50): chart_to_svg._validate_stock_semantics has cognitive complexity 50 (threshold 15). Drivers by points: if/else 30, boolean chains 9, loops 7, ternaries 4 (nesting depth added 17). 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"d92c5d5c508e4c36f5ff9d3881eea25e67714f09c350215d451e706d4abd5d67"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_transitions._validate_applied_motion (cognitive 49): pptx_transitions._validate_applied_motion has cognitive complexity 49 (threshold 15). Drivers by points: if/else 27, loops 9, ternaries 7, boolean chains 6 (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":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":1841}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd50386a5e621dcf911cfa6405257e01c9a658683fd15061d68b1078a8cc088c"}},{"ruleId":"D2","level":"warning","message":{"text":"project_specs._validate_references (cognitive 49): project_specs._validate_references has cognitive complexity 49 (threshold 15). Drivers by points: if/else 35, error handling 8, boolean chains 3, loops 3 (nesting depth added 30). 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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d4327f4b3d826124f9eaa2645f60cc79075b361a3c78ab08153186b0ac326ae"}},{"ruleId":"D2","level":"warning","message":{"text":"prompt_audit.audit_load_sets (cognitive 49): prompt_audit.audit_load_sets has cognitive complexity 49 (threshold 15). Drivers by points: if/else 36, boolean chains 5, ternaries 5, loops 3 (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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"60d134ead6fe64b2fcaf770d01fb7ed09980433926606b738bd487807df26001"}},{"ruleId":"D2","level":"warning","message":{"text":"web_to_md.download_and_rewrite_images (cognitive 49): web_to_md.download_and_rewrite_images has cognitive complexity 49 (threshold 15). Drivers by points: if/else 19, loops 14, error handling 7, ternaries 5, boolean chains 4 (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":"skills/ppt-master/scripts/source_to_md/web_to_md.py"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8bb699b1c5aa5b4423634cc2d664771a793ce7c944b566e2afbd9eadbf0bdd8"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_preset_geometry_metadata (cognitive 49): SVGQualityChecker._check_preset_geometry_metadata has cognitive complexity 49 (threshold 15). Drivers by points: if/else 24, boolean chains 8, loops 7, ternaries 7, error handling 3 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2996}}}],"partialFingerprints":{"codehealthFindingId/v1":"5346613fce5b9070a2ed3da625977d8ad020ac082aca359e2061f1a686e86e90"}},{"ruleId":"D2","level":"warning","message":{"text":"table._resolve_table_merge_layout (cognitive 49): table._resolve_table_merge_layout has cognitive complexity 49 (threshold 15). Drivers by points: if/else 35, loops 11, boolean chains 3 (nesting depth added 31). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"24c9fde66d74107d17a4e067c447fd4273edc8f7feceb4f02d214babb903ff26"}},{"ruleId":"D2","level":"warning","message":{"text":"preset_authoring._validate_expanded_authored_preset_group (cognitive 48): preset_authoring._validate_expanded_authored_preset_group has cognitive complexity 48 (threshold 15). Drivers by points: if/else 37, boolean chains 7, error handling 2, loops 2 (nesting depth added 4). 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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"412fb0bc94884fff719e2e0585b909bb02ba63fb118a80d469f13101652bdf97"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_transitions.validate_generated_transition_xml (cognitive 48): pptx_transitions.validate_generated_transition_xml has cognitive complexity 48 (threshold 15). Drivers by points: if/else 31, ternaries 10, loops 5, boolean chains 2 (nesting depth added 25). 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":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":2176}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f820f067de6864ac740413e766745e9314d4f13bed435f897c85828790d0dcd"}},{"ruleId":"D2","level":"warning","message":{"text":"ppt_to_md._xy_chart_to_markdown (cognitive 48): ppt_to_md._xy_chart_to_markdown has cognitive complexity 48 (threshold 15). Drivers by points: if/else 26, ternaries 13, boolean chains 4, loops 3, error handling 2 (nesting depth added 24). 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":"skills/ppt-master/scripts/source_to_md/ppt_to_md.py"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfd0b396ed00daaae4aa66e358a28c013aec9b0020db8d406e13d80e5655bbc5"}},{"ruleId":"D2","level":"warning","message":{"text":"image_search.run_search_manifest (cognitive 47): image_search.run_search_manifest has cognitive complexity 47 (threshold 15). Drivers by points: if/else 30, error handling 11, boolean chains 3, 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":1540}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed1729881550acfd525325de8db5e7009ee3b1530c1e33b81bb60c96dd649343"}},{"ruleId":"D2","level":"warning","message":{"text":"native_enhance_pptx_core._collect_material_readiness (cognitive 47): native_enhance_pptx_core._collect_material_readiness has cognitive complexity 47 (threshold 15). Drivers by points: if/else 35, error handling 7, boolean chains 3, loops 1, ternaries 1 (nesting depth added 25). 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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"8592b4e16141bdbc359708cb8547229390905dfbd06d7ff21a57ff7581899f35"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._validate_legacy_axes (cognitive 47): chart_to_svg._validate_legacy_axes has cognitive complexity 47 (threshold 15). Drivers by points: if/else 38, loops 6, boolean chains 3 (nesting depth added 25). 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1314}}}],"partialFingerprints":{"codehealthFindingId/v1":"588cf3d27a302a1761f90f69b0aea355366cdcdd774d7c237db4cc44c79bdc24"}},{"ruleId":"D2","level":"warning","message":{"text":"animation_config._morph_scope_errors (cognitive 47): animation_config._morph_scope_errors has cognitive complexity 47 (threshold 15). Drivers by points: if/else 33, boolean chains 7, loops 5, error handling 2 (nesting depth added 22). 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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"22b9955f59a6a03e09ec3f30b49c2f8c084df154c4aa3f6ab268da3fa739214b"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.project_paint_reference_errors (cognitive 47): utils.project_paint_reference_errors has cognitive complexity 47 (threshold 15). Drivers by points: if/else 24, boolean chains 10, ternaries 7, error handling 3, loops 3 (nesting depth added 22). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2160}}}],"partialFingerprints":{"codehealthFindingId/v1":"77f596e33cf75ba54423b8355842d2b36f26ed84cfa6a82e551d4e1b78692de2"}},{"ruleId":"D2","level":"warning","message":{"text":"server._stage2_design_directions_error (cognitive 46): server._stage2_design_directions_error has cognitive complexity 46 (threshold 15). Drivers by points: if/else 34, loops 7, boolean chains 5 (nesting depth added 22). 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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"c715c11d5881d03dd12d7073e01daf29eb1512d3461878cad39145d14e0cced8"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations.normalize_animation_effect_options (cognitive 46): pptx_animations.normalize_animation_effect_options has cognitive complexity 46 (threshold 15). Drivers by points: if/else 35, boolean chains 7, ternaries 3, loops 1 (nesting depth added 20). 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"640c380e057bc1e97dbd7fe0087f693731f0cea7e843cc07396f9e1582a4bb57"}},{"ruleId":"D2","level":"warning","message":{"text":"server.main (cognitive 46): server.main has cognitive complexity 46 (threshold 15). Drivers by points: if/else 24, error handling 11, ternaries 9, boolean chains 2 (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":"skills/ppt-master/scripts/svg_editor/server.py"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7f6dd24d9810e1d3ef2b08b639f13e1127ccf4ce289f468d8619fec4060a78a"}},{"ruleId":"D2","level":"warning","message":{"text":"cli.main (cognitive 46): cli.main has cognitive complexity 46 (threshold 15). Drivers by points: if/else 36, boolean chains 4, ternaries 4, loops 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":"skills/ppt-master/scripts/svg_quality/cli.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"268bb7ff4a88b182bba93ab8da40ae55e1c763722f12a26053df4c300489c129"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_delivery_check._font_faces_for_advisory (cognitive 45): pptx_delivery_check._font_faces_for_advisory has cognitive complexity 45 (threshold 15). Drivers by points: if/else 28, loops 14, boolean chains 3 (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":"skills/ppt-master/scripts/pptx_delivery_check.py"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef3bc56a724cd4e70b52af6653d81f1eec6c10a959a85d81a93dbc8a257f7d63"}},{"ruleId":"D2","level":"warning","message":{"text":"converter._extract_theme_info (cognitive 45): converter._extract_theme_info has cognitive complexity 45 (threshold 15). Drivers by points: if/else 28, loops 7, boolean chains 4, error handling 3, ternaries 3 (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":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"832085d97b63d1a0e2aa1f2d1dcbaf623ce3cf4da9becd54d226976c0570f57c"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_position_calculator.interactive_mode (cognitive 45): svg_position_calculator.interactive_mode has cognitive complexity 45 (threshold 15). Drivers by points: if/else 18, boolean chains 14, loops 9, error handling 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":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":1090}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbdab539279276fcae2dcfa5bbd69ebef086090cc647ac7fd3b2a90238f50c5f"}},{"ruleId":"D2","level":"warning","message":{"text":"styles.build_pattern_fill (cognitive 45): styles.build_pattern_fill has cognitive complexity 45 (threshold 15). Drivers by points: if/else 20, boolean chains 11, ternaries 11, loops 3 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/styles.py"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"879c50ca4abfc81f8a01de9a9b52144ad689b5edaec7ea6c6ce8a5af574c3cf5"}},{"ruleId":"D2","level":"warning","message":{"text":"image_search.search_and_download (cognitive 44): image_search.search_and_download has cognitive complexity 44 (threshold 15). Drivers by points: if/else 28, error handling 9, loops 5, boolean chains 1, ternaries 1 (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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a19e42d18774cf51cfec07be69e39715af4aa3a96b8580dbf9d56f5cc22f272"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._compose_template (cognitive 44): mirror_template_materialize._compose_template has cognitive complexity 44 (threshold 15). Drivers by points: if/else 31, boolean chains 5, loops 5, ternaries 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":2154}}}],"partialFingerprints":{"codehealthFindingId/v1":"aecb0bcfd0ba8f7f62bf66429e57a2eb3a1cbdef3cd097f3d41a09432fe1d9b2"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._effective_scatter_style (cognitive 44): chart_to_svg._effective_scatter_style has cognitive complexity 44 (threshold 15). Drivers by points: if/else 26, ternaries 10, boolean chains 7, loops 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1487}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f29b3944e4a60e94293c9ca89f31b614a585b6c73bf2ff1fec39edecd310fc5"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_transitions.validate_pptx_morph_pairs (cognitive 44): pptx_transitions.validate_pptx_morph_pairs has cognitive complexity 44 (threshold 15). Drivers by points: if/else 30, boolean chains 6, loops 5, error handling 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":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":2357}}}],"partialFingerprints":{"codehealthFindingId/v1":"40cebbe5e29bbebdf8ce3219101ee0527fd082786d5174d701f31746159bd0a1"}},{"ruleId":"D2","level":"warning","message":{"text":"prompt_audit.audit_schema_grammars (cognitive 44): prompt_audit.audit_schema_grammars has cognitive complexity 44 (threshold 15). Drivers by points: if/else 30, loops 10, boolean chains 4 (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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1375}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cc2a5982cf54984e64967965f32fd3a1575584d80a30952ddc7aba5279dd664"}},{"ruleId":"D2","level":"warning","message":{"text":"resource_paths._svg_image_payload_error (cognitive 44): resource_paths._svg_image_payload_error has cognitive complexity 44 (threshold 15). Drivers by points: if/else 32, loops 8, boolean chains 3, error handling 1 (nesting depth added 24). 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":"skills/ppt-master/scripts/resource_paths.py"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ee5b1b6a1c3838e98213323cb8865f5e91ececa15f82ea73c4afd61074ef789"}},{"ruleId":"D2","level":"warning","message":{"text":"elements.parse_project_nested_svg_crop (cognitive 44): elements.parse_project_nested_svg_crop has cognitive complexity 44 (threshold 15). Drivers by points: if/else 24, boolean chains 16, error handling 3, loops 1 (nesting depth added 2). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":4587}}}],"partialFingerprints":{"codehealthFindingId/v1":"c38e74041f6ecabe19d69e9c7243b6be0ceee5d6670db396021ae3ec7d1a059e"}},{"ruleId":"D2","level":"warning","message":{"text":"cli._recorded_narration_on_click_slides (cognitive 44): cli._recorded_narration_on_click_slides has cognitive complexity 44 (threshold 15). Drivers by points: if/else 25, ternaries 8, loops 6, boolean chains 5 (nesting depth added 25). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"db2e9d2d6ceecc1cf8f1d9f572e5905fdf84832860ce6b936b04d6c819e738d3"}},{"ruleId":"D2","level":"warning","message":{"text":"server._merge_confirmed_choices (cognitive 43): server._merge_confirmed_choices has cognitive complexity 43 (threshold 15). Drivers by points: if/else 25, boolean chains 9, loops 6, error handling 3 (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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1214}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5c50a471470c24afcac63dd8c9566d590e5568d906d4d9360de75e137d74f37"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._row_offset_ms (cognitive 43): pptx_animations._row_offset_ms has cognitive complexity 43 (threshold 15). Drivers by points: if/else 30, boolean chains 12, loops 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":2716}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4f008fb993d2bfa607df2de97853e45b2ac9b418ef23000742fbd4cafcf7c3b"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._canonical_native_merge_status (cognitive 43): tbl_to_svg._canonical_native_merge_status has cognitive complexity 43 (threshold 15). Drivers by points: if/else 19, loops 11, boolean chains 8, ternaries 4, error handling 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ad869c385c7a1929658bfed23873babc6d445a34243bc6ec60d551ab71d9502"}},{"ruleId":"D2","level":"warning","message":{"text":"project_utils.validate_project_structure (cognitive 43): project_utils.validate_project_structure has cognitive complexity 43 (threshold 15). Drivers by points: if/else 32, boolean chains 7, loops 3, error handling 1 (nesting depth added 17). 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":"skills/ppt-master/scripts/project_utils.py"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"e562713b34831d1a480b6892f90901a444c0151ea4803bc83c1f023ce055eb7e"}},{"ruleId":"D2","level":"warning","message":{"text":"register_template._validate_svg_template_spec (cognitive 43): register_template._validate_svg_template_spec has cognitive complexity 43 (threshold 15). Drivers by points: if/else 24, boolean chains 8, error handling 7, loops 4 (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":"skills/ppt-master/scripts/register_template.py"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"e28c772a91f8a34486dc4ff746baf488dd2c2406d31dd13e35c9b40cb60ddf90"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md._omml_to_latex (cognitive 43): doc_to_md._omml_to_latex has cognitive complexity 43 (threshold 15). Drivers by points: if/else 25, ternaries 10, boolean chains 8 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b584cd420151d89d0f560192cbded97523161b7eac682b1780a1f3026c85f5"}},{"ruleId":"D2","level":"warning","message":{"text":"align_embed_images._process_one_image (cognitive 43): align_embed_images._process_one_image has cognitive complexity 43 (threshold 15). Drivers by points: if/else 33, ternaries 5, boolean chains 4, error handling 1 (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":"skills/ppt-master/scripts/svg_finalize/align_embed_images.py"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"50fe50088676cb0c4756c500fcf048fdfa9e23f603744053cb7adbe0763526f0"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_pptx_structure_contract (cognitive 43): SVGQualityChecker._check_pptx_structure_contract has cognitive complexity 43 (threshold 15). Drivers by points: if/else 21, boolean chains 10, error handling 8, ternaries 3, loops 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":4879}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b516ea59b0da154374613c7ef5897f04e97cef880248caa548f81b88753f5e8"}},{"ruleId":"D2","level":"warning","message":{"text":"utils._transform_semantic_error (cognitive 43): utils._transform_semantic_error has cognitive complexity 43 (threshold 15). Drivers by points: if/else 37, boolean chains 6 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1145}}}],"partialFingerprints":{"codehealthFindingId/v1":"62346e3938e4add9122030a5607e6166c706fcb2402540a6e9bcc9fd44a2b7d1"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._prune_unreferenced_definition_payload_parts (cognitive 43): builder._prune_unreferenced_definition_payload_parts has cognitive complexity 43 (threshold 15). Drivers by points: if/else 29, loops 10, error handling 3, 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":3436}}}],"partialFingerprints":{"codehealthFindingId/v1":"63f346ba04ce68006f630643953b720f3434ff610717f49ac6f726c26cb4d4d0"}},{"ruleId":"D2","level":"warning","message":{"text":"update_spec.main (cognitive 43): update_spec.main has cognitive complexity 43 (threshold 15). Drivers by points: if/else 24, error handling 10, loops 5, boolean chains 2, ternaries 2 (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":"skills/ppt-master/scripts/update_spec.py"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"103ef80f527a3ba37267db143a180f07e89f80e7c758084165fa6a0c1855e650"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._copy_text_carrier (cognitive 42): mirror_template_materialize._copy_text_carrier has cognitive complexity 42 (threshold 15). Drivers by points: if/else 33, loops 6, boolean chains 3 (nesting depth added 24). 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1621}}}],"partialFingerprints":{"codehealthFindingId/v1":"51f433e1d28c152dba4e01c7f00774a4456c6f9267b98341aa12d08d7b1ec991"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._set_effect_option_value (cognitive 42): pptx_animations._set_effect_option_value has cognitive complexity 42 (threshold 15). Drivers by points: if/else 30, boolean chains 4, loops 4, ternaries 4 (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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1379}}}],"partialFingerprints":{"codehealthFindingId/v1":"63a3e5bcc4881cbf63e9f1b681b847fc39b5c4a2c734535a318794fe4d8dd9ea"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._build_cell_grid (cognitive 42): tbl_to_svg._build_cell_grid has cognitive complexity 42 (threshold 15). Drivers by points: if/else 21, loops 14, boolean chains 4, ternaries 3 (nesting depth added 25). 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"90c793a10cbf377c4e4e08d5c87188c6dc85a1905735ec0b66dbbd94c561909d"}},{"ruleId":"D2","level":"warning","message":{"text":"page_context.page_context_usage_report (cognitive 42): page_context.page_context_usage_report has cognitive complexity 42 (threshold 15). Drivers by points: if/else 32, loops 5, error handling 3, boolean chains 2 (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":"skills/ppt-master/scripts/project_management/page_context.py"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d18cdb4f2380efe8451d0798b74ceecc898759585077cf952162260ecbe0135"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_position_calculator.analyze_svg_file (cognitive 42): svg_position_calculator.analyze_svg_file has cognitive complexity 42 (threshold 15). Drivers by points: if/else 20, loops 11, ternaries 9, boolean chains 2 (nesting depth added 20). 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":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":995}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc9c2f8851279a2abb5e80514c5e16176d73c4a400b4772a0da289c04368fcb9"}},{"ruleId":"D2","level":"warning","message":{"text":"elements.project_clip_path_errors (cognitive 42): elements.project_clip_path_errors has cognitive complexity 42 (threshold 15). Drivers by points: if/else 35, boolean chains 6, loops 1 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3438}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa118789d86f4d2d3539606c3d46e1deef3d2c5cfb4a29c40d620b9110a946de"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_data._chartex_chart_data (cognitive 42): chart_data._chartex_chart_data has cognitive complexity 42 (threshold 15). Drivers by points: if/else 34, loops 5, boolean chains 3 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":1076}}}],"partialFingerprints":{"codehealthFindingId/v1":"b76f7a8f4f171c39135839b707322d2eb7db8b6a0b5cd6f049bfe99307db9231"}},{"ruleId":"D2","level":"warning","message":{"text":"semantic_markers.validate_semantic_markers (cognitive 42): semantic_markers.validate_semantic_markers has cognitive complexity 42 (threshold 15). Drivers by points: if/else 27, boolean chains 13, loops 2 (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":"skills/ppt-master/scripts/svg_to_pptx/semantic_markers.py"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce0aad41175665228b0980367dd54090db1095ab7575fbc2414f8a2fed184bd8"}},{"ruleId":"D2","level":"warning","message":{"text":"server.main (cognitive 41): server.main has cognitive complexity 41 (threshold 15). Drivers by points: if/else 24, error handling 9, ternaries 6, boolean chains 2 (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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1922}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fb1ba618ffd6cb9485722414d09bad029a242b932bd7e66443e1c09534126ec"}},{"ruleId":"D2","level":"warning","message":{"text":"image_gen.main (cognitive 41): image_gen.main has cognitive complexity 41 (threshold 15). Drivers by points: if/else 24, error handling 12, ternaries 3, boolean chains 2 (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":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":1108}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1cf5ba383462c8e5287630dc2ad99273b10f58c6356d06333f0a17da71e3a38"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_delivery_check._motion_and_hidden_summary (cognitive 41): pptx_delivery_check._motion_and_hidden_summary has cognitive complexity 41 (threshold 15). Drivers by points: if/else 22, error handling 10, boolean chains 5, loops 3, ternaries 1 (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":"skills/ppt-master/scripts/pptx_delivery_check.py"},"region":{"startLine":503}}}],"partialFingerprints":{"codehealthFindingId/v1":"48d4b7476a1b64b7e7a6bda6147b818915ca3defcd69a1f1182c8d1296e8e6cb"}},{"ruleId":"D2","level":"warning","message":{"text":"preset_authoring._validate_compact_authored_preset_group (cognitive 41): preset_authoring._validate_compact_authored_preset_group has cognitive complexity 41 (threshold 15). Drivers by points: if/else 29, boolean chains 10, error handling 1, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"875202e167785188614ea07b47fba7ee1fa469b1997edd567b2b1110ea3d97dc"}},{"ruleId":"D2","level":"warning","message":{"text":"elements._clip_preset_geometry_error (cognitive 41): elements._clip_preset_geometry_error has cognitive complexity 41 (threshold 15). Drivers by points: if/else 18, boolean chains 11, ternaries 10, error handling 2 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3229}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cc17fc41330fe9a794d5fa2d7c7bd55c20d41f80faaf81a46f2b2c75e4dbe6a"}},{"ruleId":"D2","level":"warning","message":{"text":"video_motion_plan.build_video_motion_plan (cognitive 41): video_motion_plan.build_video_motion_plan has cognitive complexity 41 (threshold 15). Drivers by points: if/else 32, boolean chains 4, loops 3, ternaries 2 (nesting depth added 20). 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":"skills/ppt-master/scripts/video_motion_plan.py"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"77bb123854cd4de4196e629e960a7c27d062cb6f5dc6becc6025f44383f244a1"}},{"ruleId":"D2","level":"warning","message":{"text":"extract_svg_assets.extract_file (cognitive 40): extract_svg_assets.extract_file has cognitive complexity 40 (threshold 15). Drivers by points: if/else 23, loops 10, boolean chains 4, ternaries 3 (nesting depth added 17). 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":"skills/ppt-master/scripts/extract_svg_assets.py"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2413fd23e17722059de7c304347b8fa98110f535030ba9b2e723b0fcf701967"}},{"ruleId":"D2","level":"warning","message":{"text":"language_tags.normalize_language_tag (cognitive 40): language_tags.normalize_language_tag has cognitive complexity 40 (threshold 15). Drivers by points: if/else 20, boolean chains 11, loops 7, ternaries 2 (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":"skills/ppt-master/scripts/language_tags.py"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3cda0e3abcb556b22a95d0ed2cd6d28731bbdff1337a4998a87e0c0fd5fda34"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._direct_border_payload (cognitive 40): tbl_to_svg._direct_border_payload has cognitive complexity 40 (threshold 15). Drivers by points: if/else 28, boolean chains 10, error handling 1, loops 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":783}}}],"partialFingerprints":{"codehealthFindingId/v1":"83268751302a3dabf356ed401457d970aa014d5e0dd1ef9638d3ffb14a7736f0"}},{"ruleId":"D2","level":"warning","message":{"text":"register_template._validate_brand_spec (cognitive 40): register_template._validate_brand_spec has cognitive complexity 40 (threshold 15). Drivers by points: if/else 26, boolean chains 8, loops 4, error handling 2 (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":"skills/ppt-master/scripts/register_template.py"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"680d2aa179c8a562d0987613e92350087717d85f87fca83333b0c3f3696742b0"}},{"ruleId":"D2","level":"warning","message":{"text":"source_to_md.dispatch_single (cognitive 40): source_to_md.dispatch_single has cognitive complexity 40 (threshold 15). Drivers by points: if/else 32, boolean chains 3, error handling 3, ternaries 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":"skills/ppt-master/scripts/source_to_md.py"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a5c2747a09d66f17605ef86746d9a0ad199e2d9a21b3805e5865e714f08ae17"}},{"ruleId":"D2","level":"warning","message":{"text":"animation_config._resolved_animation_parameter_errors (cognitive 40): animation_config._resolved_animation_parameter_errors has cognitive complexity 40 (threshold 15). Drivers by points: if/else 31, loops 6, error handling 3 (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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"afbae00723e4bf076eb7a46fb17614458c98c9d1443ace31b9b7da828aa18de8"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._slot_plans (cognitive 39): mirror_template_materialize._slot_plans has cognitive complexity 39 (threshold 15). Drivers by points: if/else 28, boolean chains 4, loops 4, ternaries 3 (nesting depth added 20). 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1538}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3b9d1977585ae5a5628746dab0bfce521c87e0e9b8c025b4208b8f364d28ee8"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_opc_validation.verify_internal_relationships (cognitive 39): pptx_opc_validation.verify_internal_relationships has cognitive complexity 39 (threshold 15). Drivers by points: if/else 28, boolean chains 5, loops 4, error handling 2 (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":"skills/ppt-master/scripts/pptx_opc_validation.py"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dca1064a1978cbc548228ca6f1d5f40c290aaa4e889c998cc8419b5a1a3c5fb"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_transitions.validate_slide_transition_structure (cognitive 39): pptx_transitions.validate_slide_transition_structure has cognitive complexity 39 (threshold 15). Drivers by points: if/else 29, loops 8, boolean chains 2 (nesting depth added 20). 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":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":2544}}}],"partialFingerprints":{"codehealthFindingId/v1":"715f59c0855c3883df79d94e867fff2f9bacca70bbeeb9f3f25bc23053f63878"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._load_authoring_documents (cognitive 38): mirror_template_materialize._load_authoring_documents has cognitive complexity 38 (threshold 15). Drivers by points: if/else 30, boolean chains 5, loops 3 (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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"36308fff69de44a427e423bcf759134c6c4201fb38d8d19b43c8ae3f13d1c721"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize.materialize_mirror_template (cognitive 38): mirror_template_materialize.materialize_mirror_template has cognitive complexity 38 (threshold 15). Drivers by points: loops 15, error handling 11, if/else 8, boolean chains 3, ternaries 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":2609}}}],"partialFingerprints":{"codehealthFindingId/v1":"76df5c98493ab7d91633d8bf724991093dc68b12d18388f1126c86f86d7a6bec"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md._docx_image_occurrences (cognitive 38): doc_to_md._docx_image_occurrences has cognitive complexity 38 (threshold 15). Drivers by points: if/else 28, boolean chains 4, error handling 4, loops 2 (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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"513a167fd271528105b8fcfbd4b6de3c8a81cb96988420bd4c82b846ab031ba3"}},{"ruleId":"D2","level":"warning","message":{"text":"table_fill._apply_table_edits_to_slide (cognitive 38): table_fill._apply_table_edits_to_slide has cognitive complexity 38 (threshold 15). Drivers by points: if/else 19, ternaries 12, loops 4, boolean chains 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":"skills/ppt-master/scripts/template_fill_pptx/table_fill.py"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"be97343a3b6b491f863111a2ad020bba47f89de4376d0cd5932fd85028aa3e69"}},{"ruleId":"D2","level":"warning","message":{"text":"image_gen._run_manifest (cognitive 37): image_gen._run_manifest has cognitive complexity 37 (threshold 15). Drivers by points: if/else 23, ternaries 6, loops 4, boolean chains 2, error handling 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":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":795}}}],"partialFingerprints":{"codehealthFindingId/v1":"db685cb4b797e69b7af9f7d3113f7b495ebe8d01ceb91d619bd1b8feda3a9787"}},{"ruleId":"D2","level":"warning","message":{"text":"image_search.load_search_manifest (cognitive 37): image_search.load_search_manifest has cognitive complexity 37 (threshold 15). Drivers by points: if/else 22, error handling 7, loops 5, boolean chains 3 (nesting depth added 17). 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":1342}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a9c37ddfb655e1575617b27b20c108a3c382a4bb0a1ecc73080c8cb39081ed3"}},{"ruleId":"D2","level":"warning","message":{"text":"narration_sync._load_timing_plan (cognitive 37): narration_sync._load_timing_plan has cognitive complexity 37 (threshold 15). Drivers by points: if/else 27, boolean chains 7, loops 3 (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":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"31004a2c534edd9b8ba6c4d874c8d09ef9523d6cddffcef187d873586b6d5521"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._data_label_text_style (cognitive 37): chart_to_svg._data_label_text_style has cognitive complexity 37 (threshold 15). Drivers by points: if/else 20, boolean chains 10, ternaries 5, error handling 2 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1973}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f3818319630546f826eade0b0c130a9e1fd87a4e5a22588ca3df7cca6d2c401"}},{"ruleId":"D2","level":"warning","message":{"text":"paths.project_gradient_geometry_errors (cognitive 37): paths.project_gradient_geometry_errors has cognitive complexity 37 (threshold 15). Drivers by points: if/else 18, ternaries 12, loops 3, boolean chains 2, error handling 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"878284e74cdf83ece5018339575e34ee202326e498e6d85d90b4012a29dfb724"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_xml._chart_plot_xml (cognitive 37): chart_xml._chart_plot_xml has cognitive complexity 37 (threshold 15). Drivers by points: ternaries 13, boolean chains 12, if/else 12 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":970}}}],"partialFingerprints":{"codehealthFindingId/v1":"494c59b3e3452f7e6afa68dcd68aa49dcaa7cc6a82bd67a4515ac9e5256d6cff"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure.template_prototype_lock_errors (cognitive 37): template_structure.template_prototype_lock_errors has cognitive complexity 37 (threshold 15). Drivers by points: if/else 21, boolean chains 7, error handling 6, loops 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1990}}}],"partialFingerprints":{"codehealthFindingId/v1":"20cb47e4ca28db551ecc63b2a9a188586ac68cc5987a7f06f419cfa082da5aee"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._mark_explicit_breaks (cognitive 36): mirror_template_materialize._mark_explicit_breaks has cognitive complexity 36 (threshold 15). Drivers by points: if/else 26, loops 7, boolean chains 3 (nesting depth added 17). 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1067}}}],"partialFingerprints":{"codehealthFindingId/v1":"88ba150267fc59e688b1d9c964b2d3a0213b1a6ef306315bc83210d76891d80a"}},{"ruleId":"D2","level":"warning","message":{"text":"slide_to_svg._convert_shape (cognitive 36): slide_to_svg._convert_shape has cognitive complexity 36 (threshold 15). Drivers by points: if/else 21, boolean chains 6, ternaries 6, error handling 3 (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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"d54f230831409a1e6300529b21a7e67cff278d57a723774a0e5de73f75162352"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._legacy_text_body_has_unsupported_formatting (cognitive 36): tbl_to_svg._legacy_text_body_has_unsupported_formatting has cognitive complexity 36 (threshold 15). Drivers by points: if/else 23, boolean chains 6, ternaries 4, loops 3 (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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e0b02dbb7ed7a640f0b1caf01c72549fbca12b8dec26df763c5931b28176790"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_contracts.check_authoring_property_contract (cognitive 36): svg_contracts.check_authoring_property_contract has cognitive complexity 36 (threshold 15). Drivers by points: if/else 26, boolean chains 5, loops 5 (nesting depth added 20). 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7d8b7b156c7b1f6c7155891e94ae81d680a736071185752c8ccf034b50e2288"}},{"ruleId":"D2","level":"warning","message":{"text":"validator._chart_tokens (cognitive 36): validator._chart_tokens has cognitive complexity 36 (threshold 15). Drivers by points: if/else 16, loops 13, boolean chains 6, ternaries 1 (nesting depth added 20). 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":"skills/ppt-master/scripts/template_fill_pptx/validator.py"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a67694b36a87c24f0a4c121f8a837dd87ed9dc80fcb59d567c04b0dcf831214"}},{"ruleId":"D2","level":"warning","message":{"text":"animation_config.main (cognitive 35): animation_config.main has cognitive complexity 35 (threshold 15). Drivers by points: if/else 17, loops 12, error handling 6 (nesting depth added 17). 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":"skills/ppt-master/scripts/animation_config.py"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"a21057c003046b347b143360c42eb62c8fec8c430dcd9cd93407e93ca794daf8"}},{"ruleId":"D2","level":"warning","message":{"text":"notes_to_audio._expected_note_roster (cognitive 35): notes_to_audio._expected_note_roster has cognitive complexity 35 (threshold 15). Drivers by points: if/else 19, loops 6, ternaries 6, boolean chains 2, error handling 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":"skills/ppt-master/scripts/notes_to_audio.py"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"218ca1182d8b1ef0ab21b3892247ef577f3198a95e33c1f1e675992b02984aa6"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations.create_sequence_timing_xml (cognitive 35): pptx_animations.create_sequence_timing_xml has cognitive complexity 35 (threshold 15). Drivers by points: if/else 25, loops 5, boolean chains 4, ternaries 1 (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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1845}}}],"partialFingerprints":{"codehealthFindingId/v1":"352465c80690099e5bd7d48b03483f46fbc3300aa86d229d2327c16f561fdcfb"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_icon_placeholders (cognitive 35): SVGQualityChecker._check_icon_placeholders has cognitive complexity 35 (threshold 15). Drivers by points: if/else 19, ternaries 10, boolean chains 3, error handling 2, loops 1 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2843}}}],"partialFingerprints":{"codehealthFindingId/v1":"073f9dbce8095ab510495d7033bf55518519f9f6c6e876295b87cf1d66aaf89c"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure.template_lock_errors (cognitive 35): template_structure.template_lock_errors has cognitive complexity 35 (threshold 15). Drivers by points: if/else 27, loops 3, boolean chains 2, error handling 2, ternaries 1 (nesting depth added 17). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":2151}}}],"partialFingerprints":{"codehealthFindingId/v1":"db745b7444636d004f8787ab28604c39126219b12e039742c74a0e11893686a4"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure._placement_lint_errors (cognitive 35): template_structure._placement_lint_errors has cognitive complexity 35 (threshold 15). Drivers by points: if/else 21, boolean chains 8, error handling 2, loops 2, ternaries 2 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":3373}}}],"partialFingerprints":{"codehealthFindingId/v1":"cda1cb1bde25e950f72b282bce513b691ee7080619a783487aaff02543a40f52"}},{"ruleId":"D2","level":"warning","message":{"text":"applier.apply_plan (cognitive 35): applier.apply_plan has cognitive complexity 35 (threshold 15). Drivers by points: if/else 20, error handling 6, loops 4, boolean chains 3, ternaries 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":"skills/ppt-master/scripts/template_fill_pptx/applier.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f0a03a9d6d2a2582faff25414e2c3c2495106fabe7f7922ab4e7de603a2d8d8"}},{"ruleId":"D2","level":"warning","message":{"text":"native_payloads.externalize_native_payloads (cognitive 34): native_payloads.externalize_native_payloads has cognitive complexity 34 (threshold 15). Drivers by points: if/else 26, boolean chains 7, loops 1 (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":"skills/ppt-master/scripts/native_payloads.py"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2b9cb78cfbef4ee89d54301c283386e4265f13aaad43f3e746c9f9dd3d2eda6"}},{"ruleId":"D2","level":"warning","message":{"text":"native_payloads._load_store (cognitive 34): native_payloads._load_store has cognitive complexity 34 (threshold 15). Drivers by points: if/else 20, boolean chains 8, loops 4, error handling 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":"skills/ppt-master/scripts/native_payloads.py"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd0dd5902eb78222dd0e6ef9d108077e6cef324e344e5373fc33611cdfb504ea"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._scale_animation_row_duration (cognitive 34): pptx_animations._scale_animation_row_duration has cognitive complexity 34 (threshold 15). Drivers by points: if/else 19, ternaries 6, boolean chains 5, loops 4 (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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1182}}}],"partialFingerprints":{"codehealthFindingId/v1":"23552ffb48ba5245284421936c8ea5ff459962a7d1235373977b96c1c81f735f"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._resolved_line (cognitive 34): chart_to_svg._resolved_line has cognitive complexity 34 (threshold 15). Drivers by points: if/else 28, boolean chains 5, loops 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"7022392171030e25fbe2e0c5e495cd741e8cbac2195b208056020a5dca77b9fd"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._canonical_title_paragraph (cognitive 34): chart_to_svg._canonical_title_paragraph has cognitive complexity 34 (threshold 15). Drivers by points: if/else 18, boolean chains 11, error handling 2, ternaries 2, loops 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1846}}}],"partialFingerprints":{"codehealthFindingId/v1":"9434b67adc62416c7ea8981c7e3188c4547c89b78f1b7f063ff6711ec1612e95"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_rect_to_path.main (cognitive 34): svg_rect_to_path.main has cognitive complexity 34 (threshold 15). Drivers by points: if/else 29, boolean chains 3, loops 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":"skills/ppt-master/scripts/svg_finalize/svg_rect_to_path.py"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"b716e0ef1bc3ae7a7d30b3f20e215838e88a2be5839cef79820cb386fd373170"}},{"ruleId":"D2","level":"warning","message":{"text":"shape_boolean._connected_components (cognitive 34): shape_boolean._connected_components has cognitive complexity 34 (threshold 15). Drivers by points: if/else 26, loops 6, boolean chains 2 (nesting depth added 17). 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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":1080}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb711151ca5a88c1c055f86f58c844fad150c54ff7d6dd2c5743474fd09f83d2"}},{"ruleId":"D2","level":"warning","message":{"text":"prompt_audit._registry_ids (cognitive 33): prompt_audit._registry_ids has cognitive complexity 33 (threshold 15). Drivers by points: if/else 25, error handling 4, boolean chains 2, loops 2 (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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1023}}}],"partialFingerprints":{"codehealthFindingId/v1":"4224042c5b7279a87a528111ae5079341af0afdc722e5fbf64eb0e00c31341a2"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_animation_group_ids (cognitive 33): SVGQualityChecker._check_animation_group_ids has cognitive complexity 33 (threshold 15). Drivers by points: if/else 23, boolean chains 4, ternaries 4, loops 2 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3268}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ef9d1b02b2a88053ba3420e4ff6e67af5641e376cbff2a3b499f520741047a7"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.parse_project_filter_params (cognitive 33): utils.parse_project_filter_params has cognitive complexity 33 (threshold 15). Drivers by points: if/else 24, ternaries 5, boolean chains 3, loops 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2486}}}],"partialFingerprints":{"codehealthFindingId/v1":"826e8c380d66a92dcdf2b3cf09a0ea545773c219c0e80da5bf58955fa4d46c38"}},{"ruleId":"D2","level":"warning","message":{"text":"marker_status.native_marker_status_errors (cognitive 33): marker_status.native_marker_status_errors has cognitive complexity 33 (threshold 15). Drivers by points: if/else 20, boolean chains 10, error handling 1, loops 1, ternaries 1 (nesting depth added 4). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_status.py"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"026a0e0cdfb2b72f1458d4a8d098bb8ffeb5c8d2a8e3efb499367a16100f782b"}},{"ruleId":"D2","level":"warning","message":{"text":"total_md_split.parse_total_md (cognitive 33): total_md_split.parse_total_md has cognitive complexity 33 (threshold 15). Drivers by points: if/else 25, boolean chains 4, loops 3, error handling 1 (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":"skills/ppt-master/scripts/total_md_split.py"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"be6fb3a43fe93382d7ae8169bfef8725c3baa6217eb143f4f034592f64633ca1"}},{"ruleId":"D2","level":"warning","message":{"text":"extract_svg_assets._existing_placeholder_entries (cognitive 32): extract_svg_assets._existing_placeholder_entries has cognitive complexity 32 (threshold 15). Drivers by points: if/else 23, error handling 5, loops 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":"skills/ppt-master/scripts/extract_svg_assets.py"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ddb961ca7de0936671fe8c4bc6e52542829872433c6fc8fde27b5731cc88a5f"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._validate_graph_roster (cognitive 32): mirror_template_materialize._validate_graph_roster has cognitive complexity 32 (threshold 15). Drivers by points: if/else 25, loops 6, boolean chains 1 (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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":839}}}],"partialFingerprints":{"codehealthFindingId/v1":"76f0dccff22a03e1fcc6e41162d875152a0d332e5d81152035efc580c2df10eb"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations.validate_pptx_animation_package (cognitive 32): pptx_animations.validate_pptx_animation_package has cognitive complexity 32 (threshold 15). Drivers by points: if/else 20, error handling 7, loops 5 (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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":3568}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d179777984baa7ea4ee0f01a89644c37970f1feaa0670fc1598463636f5429e"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._payload_from_chart_xml (cognitive 32): chart_to_svg._payload_from_chart_xml has cognitive complexity 32 (threshold 15). Drivers by points: if/else 23, boolean chains 7, ternaries 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"47e5997107b5b45ec579fafccc905f610cc5f7621bbce45d5aecbfb16d1f8372"}},{"ruleId":"D2","level":"warning","message":{"text":"project_utils.validate_communication_trace (cognitive 32): project_utils.validate_communication_trace has cognitive complexity 32 (threshold 15). Drivers by points: if/else 20, ternaries 6, error handling 3, boolean chains 2, loops 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":"skills/ppt-master/scripts/project_utils.py"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3b61bb8e4db4aec9473d7168962320290e0b8480d8b9ee796b06589e72b7ef7"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_placeholder_carrier_flattening (cognitive 32): SVGQualityChecker._check_placeholder_carrier_flattening has cognitive complexity 32 (threshold 15). Drivers by points: if/else 21, boolean chains 8, loops 2, error handling 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3729}}}],"partialFingerprints":{"codehealthFindingId/v1":"912254b46c2964bfb85ad9f5f815c78007509e54c55b85a0d76827d60d17f5e9"}},{"ruleId":"D2","level":"warning","message":{"text":"animation_config._resolve_morph_pairs (cognitive 32): animation_config._resolve_morph_pairs has cognitive complexity 32 (threshold 15). Drivers by points: if/else 24, loops 7, boolean chains 1 (nesting depth added 17). 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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"571246150a7410170bf7071636ecb0b8a915ab756f77846e2694361d4dd331c8"}},{"ruleId":"D2","level":"warning","message":{"text":"elements.validate_preset_geometry_metadata (cognitive 32): elements.validate_preset_geometry_metadata has cognitive complexity 32 (threshold 15). Drivers by points: if/else 16, error handling 10, boolean chains 5, loops 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":874}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1bf42662a028078cb450241e75b0e488ce2c1a40550f3a3f9c2377cbb4ec1c8"}},{"ruleId":"D2","level":"warning","message":{"text":"elements.convert_circle (cognitive 32): elements.convert_circle has cognitive complexity 32 (threshold 15). Drivers by points: if/else 19, ternaries 7, boolean chains 6 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1357}}}],"partialFingerprints":{"codehealthFindingId/v1":"600e70a4f90d0d0aed999ea67457907bba6ee9fe30bb78144b5123718b844612"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_style._legend_candidate_texts (cognitive 32): chart_style._legend_candidate_texts has cognitive complexity 32 (threshold 15). Drivers by points: if/else 20, loops 8, boolean chains 3, ternaries 1 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f3120a670696061f6c869e780afeb58ae28c721ca5c9fa83b1034c475c303e6"}},{"ruleId":"D2","level":"warning","message":{"text":"manifest.parse_theme (cognitive 32): manifest.parse_theme has cognitive complexity 32 (threshold 15). Drivers by points: if/else 26, boolean chains 4, loops 2 (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":"skills/ppt-master/scripts/template_import/manifest.py"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"35e070713d891ca4b5e42ec3dc88b5b8ab75766f6c5a2f497300388c0d661555"}},{"ruleId":"D2","level":"warning","message":{"text":"image_search.promote_candidate (cognitive 31): image_search.promote_candidate has cognitive complexity 31 (threshold 15). Drivers by points: if/else 18, boolean chains 7, error handling 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"61f48b47de20e2367b5891774eb4b1343ae9aa94b075fdf5ea174b5eb672da62"}},{"ruleId":"D2","level":"warning","message":{"text":"latex_render._make_png_background_transparent (cognitive 31): latex_render._make_png_background_transparent has cognitive complexity 31 (threshold 15). Drivers by points: if/else 19, loops 10, boolean chains 2 (nesting depth added 17). 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":"skills/ppt-master/scripts/latex_render.py"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"c655ace83e8d465df66ecee0749dc65852df04dc2f94127935b8a3cfc83e966a"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._apply_timing_options (cognitive 31): pptx_animations._apply_timing_options has cognitive complexity 31 (threshold 15). Drivers by points: if/else 26, loops 2, ternaries 2, 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1513}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a4db8a8a6bcccc945a31d902c50ffbab81df65f0e885260dea9051432d744b0"}},{"ruleId":"D2","level":"warning","message":{"text":"converter.publish_staged_workspace (cognitive 31): converter.publish_staged_workspace has cognitive complexity 31 (threshold 15). Drivers by points: if/else 19, boolean chains 6, error handling 6 (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":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"49a0bf4d35dd88a8bc77195fcecd67270bb5cf0bf005646cc0058d3dec3a773b"}},{"ruleId":"D2","level":"warning","message":{"text":"txbody_to_svg._wrap_paragraph_into_lines (cognitive 31): txbody_to_svg._wrap_paragraph_into_lines has cognitive complexity 31 (threshold 15). Drivers by points: if/else 25, boolean chains 3, loops 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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":1023}}}],"partialFingerprints":{"codehealthFindingId/v1":"818a97a6043e12633e3e19f4b257be228048f1f661d80fa0fad81e3554b9f139"}},{"ruleId":"D2","level":"warning","message":{"text":"prompt_audit.extract_references (cognitive 31): prompt_audit.extract_references has cognitive complexity 31 (threshold 15). Drivers by points: if/else 20, loops 6, error handling 4, boolean chains 1 (nesting depth added 20). 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":840}}}],"partialFingerprints":{"codehealthFindingId/v1":"7952fb39315f075a526b5ef4fa3d51c96b6fa538dc788cb0dbd5fe4f28bae9b3"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md._sanitize_epub_manifest (cognitive 31): doc_to_md._sanitize_epub_manifest has cognitive complexity 31 (threshold 15). Drivers by points: if/else 22, loops 4, boolean chains 2, ternaries 2, error handling 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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":1062}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a11a11ebace70f1fb70f087fee7950e4bf05d14c31b41d813d20b2c4880d806"}},{"ruleId":"D2","level":"warning","message":{"text":"web_to_md.extract_metadata (cognitive 31): web_to_md.extract_metadata has cognitive complexity 31 (threshold 15). Drivers by points: if/else 17, boolean chains 8, loops 5, ternaries 1 (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":"skills/ppt-master/scripts/source_to_md/web_to_md.py"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc24a936439ed01c52f56aa0677bc8dda2baeaca197a1e477fa26f81529f7c28"}},{"ruleId":"D2","level":"warning","message":{"text":"flatten_tspan.main (cognitive 31): flatten_tspan.main has cognitive complexity 31 (threshold 15). Drivers by points: if/else 21, loops 5, ternaries 4, boolean chains 1 (nesting depth added 17). 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":"skills/ppt-master/scripts/svg_finalize/flatten_tspan.py"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"25bbd4b8f93eae8d6afd18be74b95b398a36b08f61c98fc58984a265a144d1ee"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_illustration_resource_contract (cognitive 31): SVGQualityChecker._check_illustration_resource_contract has cognitive complexity 31 (threshold 15). Drivers by points: if/else 23, boolean chains 3, loops 3, error handling 1, ternaries 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":5281}}}],"partialFingerprints":{"codehealthFindingId/v1":"0217dee6b66cb2b2a16b713756853e67b668e6abe0ce22100a1043ba393299f1"}},{"ruleId":"D2","level":"warning","message":{"text":"elements._nested_crop_clip_preset_geometry_error (cognitive 31): elements._nested_crop_clip_preset_geometry_error has cognitive complexity 31 (threshold 15). Drivers by points: if/else 13, boolean chains 10, ternaries 6, error handling 2 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3334}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dfe179361f781060acd742d601827e9e9bdec7e2d5c74abd5e88ffdf93773b0"}},{"ruleId":"D2","level":"warning","message":{"text":"paths._parse_svg_path_tokens (cognitive 31): paths._parse_svg_path_tokens has cognitive complexity 31 (threshold 15). Drivers by points: if/else 21, boolean chains 5, loops 5 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"a40ddcd5649023d3a2cf15fb94b0235b22d08ed83e674a5c919d510a38344f62"}},{"ruleId":"D2","level":"warning","message":{"text":"theme_fonts.apply_master_text_style_spec (cognitive 31): theme_fonts.apply_master_text_style_spec has cognitive complexity 31 (threshold 15). Drivers by points: if/else 17, loops 10, error handling 4 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/theme_fonts.py"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"5938c9804f389b24233ead1c70ed232b735dff91bdd3f26221f9c421a9b64fd5"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_xml._series_xml (cognitive 31): chart_xml._series_xml has cognitive complexity 31 (threshold 15). Drivers by points: ternaries 18, if/else 9, boolean chains 3, loops 1 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"38d0609ed75c8e430a744d7e21a9e41509dfe8fca1aa9cf386e92954e76142b3"}},{"ruleId":"D2","level":"warning","message":{"text":"cli._source_resource_audit (cognitive 31): cli._source_resource_audit has cognitive complexity 31 (threshold 15). Drivers by points: if/else 18, loops 8, boolean chains 3, error handling 2 (nesting depth added 17). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"0179cdf3b72482ff96ee48fdabe8e2830e16e5e7922270da2008c9bbfb2c2135"}},{"ruleId":"D2","level":"warning","message":{"text":"shape_boolean._validate_geometry_presentation (cognitive 31): shape_boolean._validate_geometry_presentation has cognitive complexity 31 (threshold 15). Drivers by points: if/else 22, boolean chains 6, loops 3 (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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ec98c1c08117892d2b53e9b3f364c915db9b31e52b3b7dfc1d534b00223e16b"}},{"ruleId":"D2","level":"warning","message":{"text":"extract_svg_pictures._run (cognitive 30): extract_svg_pictures._run has cognitive complexity 30 (threshold 15). Drivers by points: if/else 14, boolean chains 5, loops 4, ternaries 4, error handling 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":"skills/ppt-master/scripts/extract_svg_pictures.py"},"region":{"startLine":890}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad1af2c6c80b78c5c037177c59aa7387d56023a3bb943f857309b8b06fb4f3cb"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._pie_visual_styles (cognitive 30): chart_to_svg._pie_visual_styles has cognitive complexity 30 (threshold 15). Drivers by points: if/else 11, ternaries 9, boolean chains 6, error handling 2, loops 2 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"34cdb9b9ac63d0917f9ababcaff3c8c5dd8fed9a5a1abecd628b0d35e072ce80"}},{"ruleId":"D2","level":"warning","message":{"text":"preset_authoring._validate_style (cognitive 30): preset_authoring._validate_style has cognitive complexity 30 (threshold 15). Drivers by points: if/else 21, boolean chains 5, loops 2, ternaries 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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"974ef028782fac2c53989fa82aa5bbec9af2579e455063dae183159ffb6facca"}},{"ruleId":"D2","level":"warning","message":{"text":"source_to_md.dispatch_many (cognitive 30): source_to_md.dispatch_many has cognitive complexity 30 (threshold 15). Drivers by points: if/else 14, loops 7, boolean chains 6, ternaries 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":"skills/ppt-master/scripts/source_to_md.py"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e772722e859eba25f1b36aae7727833a808ee02c3b3cce0b69c0dd8de48406d"}},{"ruleId":"D2","level":"warning","message":{"text":"ppt_to_md._category_chart_to_markdown (cognitive 30): ppt_to_md._category_chart_to_markdown has cognitive complexity 30 (threshold 15). Drivers by points: if/else 10, ternaries 9, boolean chains 4, loops 4, error handling 3 (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":"skills/ppt-master/scripts/source_to_md/ppt_to_md.py"},"region":{"startLine":608}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1ecd624494a9d7ec8ef5de75962ab5e7ef94edda8c18b6bded9b694d4e1ecb3"}},{"ruleId":"D2","level":"warning","message":{"text":"server._validate_edit_attrs (cognitive 30): server._validate_edit_attrs has cognitive complexity 30 (threshold 15). Drivers by points: if/else 26, boolean chains 3, loops 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":"skills/ppt-master/scripts/svg_editor/server.py"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"c308c4627d6c7268c02e151b6e2b9a11f890d329b0be0d6b179f13670b9a3bb7"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_contracts.check_paint_compatibility (cognitive 30): svg_contracts.check_paint_compatibility has cognitive complexity 30 (threshold 15). Drivers by points: if/else 14, error handling 7, ternaries 4, boolean chains 3, loops 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"50c93b5382becebccfe6706e42ae48577a1631344815e4b1283348eb4b511902"}},{"ruleId":"D2","level":"warning","message":{"text":"elements._resolve_clip_geometry (cognitive 30): elements._resolve_clip_geometry has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, ternaries 4, boolean chains 3, loops 3 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3554}}}],"partialFingerprints":{"codehealthFindingId/v1":"a461debd6dc04be72e5b2076700e2794ce70c1c83cfc26035fb107d6325a980a"}},{"ruleId":"D2","level":"warning","message":{"text":"table._table_run (cognitive 30): table._table_run has cognitive complexity 30 (threshold 15). Drivers by points: if/else 24, boolean chains 4, loops 2 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e1a244c90523bb2cf5929e98729aae9dcae77be2a329f4aa52b3948929e494d"}},{"ruleId":"D2","level":"warning","message":{"text":"server._submission_stage_error (cognitive 29): server._submission_stage_error has cognitive complexity 29 (threshold 15). Drivers by points: if/else 19, ternaries 6, error handling 3, 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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":847}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cdd27b7143a8725451c21f8f00cfa677160fedaad2e56f97eb13724fc870335"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._slot_wrapper (cognitive 29): mirror_template_materialize._slot_wrapper has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21, loops 4, boolean chains 3, ternaries 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1978}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fac0ffb2551d731b4b842537137d4cbddc907cdfad9596be0d94cc004851fba"}},{"ruleId":"D2","level":"warning","message":{"text":"excel_to_md._content_bounds (cognitive 29): excel_to_md._content_bounds has cognitive complexity 29 (threshold 15). Drivers by points: ternaries 20, if/else 4, loops 4, boolean chains 1 (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":"skills/ppt-master/scripts/source_to_md/excel_to_md.py"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"48240221e28bb984658be45489631eb36c1303f1b007cdb2ea40366bd422e443"}},{"ruleId":"D2","level":"warning","message":{"text":"web_to_md.find_main_content (cognitive 29): web_to_md.find_main_content has cognitive complexity 29 (threshold 15). Drivers by points: if/else 20, loops 6, boolean chains 2, 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":"skills/ppt-master/scripts/source_to_md/web_to_md.py"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"93fa365c155eb366a3c20f8bc3e8015a161dc94733786a4d6736b86a4fe91f34"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_contracts.check_forbidden_elements (cognitive 29): svg_contracts.check_forbidden_elements has cognitive complexity 29 (threshold 15). Drivers by points: if/else 22, loops 5, boolean chains 2 (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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb023c5a01d04afcde3f8162f8cef2d0daaa11d7783f9d1c6a7352093a6b469c"}},{"ruleId":"D2","level":"warning","message":{"text":"elements._valid_emf_payload (cognitive 29): elements._valid_emf_payload has cognitive complexity 29 (threshold 15). Drivers by points: if/else 18, boolean chains 10, 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e76a1a028da9d2adfee0fa40ea69c664b91ab6a6d492379ddcbdbca7ca3c895"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.parse_svg_color (cognitive 29): utils.parse_svg_color has cognitive complexity 29 (threshold 15). Drivers by points: if/else 14, error handling 6, ternaries 6, boolean chains 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1663}}}],"partialFingerprints":{"codehealthFindingId/v1":"75218fdcf96a91e6299c5af55cf027487bf76275cf755e3792440bea44ddc6cb"}},{"ruleId":"D2","level":"warning","message":{"text":"validator._replacement_tokens (cognitive 29): validator._replacement_tokens has cognitive complexity 29 (threshold 15). Drivers by points: if/else 13, ternaries 7, loops 5, boolean chains 4 (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":"skills/ppt-master/scripts/template_fill_pptx/validator.py"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"31f0b354e44c291cb1a23e570810a5f720cb8ac364693038fe4d8aca6ddab0cc"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._rewrite_packaged_assets (cognitive 28): mirror_template_materialize._rewrite_packaged_assets has cognitive complexity 28 (threshold 15). Drivers by points: if/else 16, ternaries 8, loops 3, boolean chains 1 (nesting depth added 17). 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":2409}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e34121a4f0eb23154fc13947bc8687cccbf93aa3dd9cf6d02a9505f885d9b7d"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._timing_summary (cognitive 28): pptx_animations._timing_summary has cognitive complexity 28 (threshold 15). Drivers by points: if/else 24, boolean chains 2, ternaries 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":2504}}}],"partialFingerprints":{"codehealthFindingId/v1":"d67dfa0dbad7abde77e4283e998d9b6cf108bd8e8ed19c631b2b4ddaa4bd059d"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_to_svg.main (cognitive 28): pptx_to_svg.main has cognitive complexity 28 (threshold 15). Drivers by points: if/else 13, ternaries 8, loops 4, boolean chains 2, error handling 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":"skills/ppt-master/scripts/pptx_to_svg.py"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"1458e7d427ef854e551c4c5368eaa253a12321fcb5639e21ecd266c107ab483d"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._resolved_solid_fill (cognitive 28): chart_to_svg._resolved_solid_fill has cognitive complexity 28 (threshold 15). Drivers by points: if/else 17, boolean chains 6, error handling 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e77560c54c65c0c4b76a024811bcfa0577b4e4ee4cc26841a723084f7c9634e"}},{"ruleId":"D2","level":"warning","message":{"text":"chartex_to_svg._payload_from_chartex_xml (cognitive 28): chartex_to_svg._payload_from_chartex_xml has cognitive complexity 28 (threshold 15). Drivers by points: if/else 25, loops 2, 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":"skills/ppt-master/scripts/pptx_to_svg/chartex_to_svg.py"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d07ba510e0a64f5d4bbe5e545a7f9ceb1b61b418ca3a4bbf79970b44de5bd8c"}},{"ruleId":"D2","level":"warning","message":{"text":"normalized_chart_svg._render_lines_or_areas (cognitive 28): normalized_chart_svg._render_lines_or_areas has cognitive complexity 28 (threshold 15). Drivers by points: if/else 10, loops 7, boolean chains 6, ternaries 5 (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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"2481043b4e15d2ffece4fb90b2c9fa5797fa07666326ae4add2bf2c66c878419"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._convert_cell_text (cognitive 28): tbl_to_svg._convert_cell_text has cognitive complexity 28 (threshold 15). Drivers by points: if/else 17, loops 6, boolean chains 4, error handling 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1541}}}],"partialFingerprints":{"codehealthFindingId/v1":"048b29c38f2ba0995558cca81a840f01ec0c3326b4cc839cf80be9872aeb17c5"}},{"ruleId":"D2","level":"warning","message":{"text":"_batch.run_path_batch (cognitive 28): _batch.run_path_batch has cognitive complexity 28 (threshold 15). Drivers by points: if/else 14, loops 7, boolean chains 4, error handling 2, ternaries 1 (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":"skills/ppt-master/scripts/source_to_md/_batch.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"adb755b6847d2fadb61b9d96f0836880e602a7ac3e46f06b1904c4d6c4723371"}},{"ruleId":"D2","level":"warning","message":{"text":"animation_config._declared_animation_sounds (cognitive 28): animation_config._declared_animation_sounds has cognitive complexity 28 (threshold 15). Drivers by points: if/else 17, loops 6, error handling 3, boolean chains 2 (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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":1181}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8ff9729cab8cdad037d57c614bb4241254ef58ab26c5af5e5ded9d7ad725656"}},{"ruleId":"D2","level":"warning","message":{"text":"elements.convert_image (cognitive 28): elements.convert_image has cognitive complexity 28 (threshold 15). Drivers by points: if/else 13, ternaries 13, boolean chains 2 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":4265}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c847bc45b1d7b519207f83b85e7ea4d4785007273a42694b89768e59cab08b0"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._placeholder_text_body (cognitive 28): builder._placeholder_text_body has cognitive complexity 28 (threshold 15). Drivers by points: if/else 13, ternaries 11, boolean chains 3, error handling 1 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":2375}}}],"partialFingerprints":{"codehealthFindingId/v1":"c23c6d66926a1146adc60459cc02ae8c5760f0927023242e3c3c1f334593d92b"}},{"ruleId":"D2","level":"warning","message":{"text":"server._wait_for_result (cognitive 27): server._wait_for_result has cognitive complexity 27 (threshold 15). Drivers by points: if/else 15, error handling 7, boolean chains 3, loops 1, 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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce735d5cd6a928cca59d289499b11350b182d6b6e62670136baf420bcb97ac7d"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._select_supported_timing_branch (cognitive 27): pptx_animations._select_supported_timing_branch has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, loops 6, 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":2998}}}],"partialFingerprints":{"codehealthFindingId/v1":"599c04e8fec9c6f9418622f2bdaa27e90a751c528b323bb038e88efea41ead3a"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_delivery_check._content_type_maps (cognitive 27): pptx_delivery_check._content_type_maps has cognitive complexity 27 (threshold 15). Drivers by points: if/else 17, boolean chains 7, error handling 2, loops 1 (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":"skills/ppt-master/scripts/pptx_delivery_check.py"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"11b1f2238631a64c4413c58f4cbc63d61db909b7254fccb7fc13f6f91e8e778a"}},{"ruleId":"D2","level":"warning","message":{"text":"converter.convert_pptx_to_svg (cognitive 27): converter.convert_pptx_to_svg has cognitive complexity 27 (threshold 15). Drivers by points: ternaries 12, if/else 6, boolean chains 5, loops 4 (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":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"939f4f759d5677e0a00dbe25653f861c426d6ffd8b283147daf4b1354c7c082d"}},{"ruleId":"D2","level":"warning","message":{"text":"shape_walker._walk_container (cognitive 27): shape_walker._walk_container has cognitive complexity 27 (threshold 15). Drivers by points: if/else 22, boolean chains 4, loops 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":"skills/ppt-master/scripts/pptx_to_svg/shape_walker.py"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"f25152009f8aed4021d1ceaf6ccd5dc239626926277f81c87124a6e211443dc9"}},{"ruleId":"D2","level":"warning","message":{"text":"ImageRotator.apply_fixes (cognitive 27): ImageRotator.apply_fixes has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, error handling 5, 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":"skills/ppt-master/scripts/rotate_images.py"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3cd9ae65915d0defd8e5030073f1184c5f594dde93ce591aea783d50fd94628"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md._convert_ipynb (cognitive 27): doc_to_md._convert_ipynb has cognitive complexity 27 (threshold 15). Drivers by points: if/else 8, loops 6, ternaries 6, error handling 5, boolean chains 2 (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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":1258}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fa491df47a8f11fce6ad21646a8f468fccf44b4b8ec3ad8630dc3fdc6b82413"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_root_module_text_bounds (cognitive 27): SVGQualityChecker._check_root_module_text_bounds has cognitive complexity 27 (threshold 15). Drivers by points: if/else 21, loops 3, boolean chains 2, error handling 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2390}}}],"partialFingerprints":{"codehealthFindingId/v1":"de54c4ec0f9831c3665285e79dcb77e8d23d13f1a5b11395d7fbcfb2bc48ac44"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_data._category_series (cognitive 27): chart_data._category_series has cognitive complexity 27 (threshold 15). Drivers by points: if/else 20, boolean chains 4, ternaries 2, loops 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2ddda75635bd46bda085f103b2649bb51b3906fed69f1fbcc28eada3ea6d2fe"}},{"ruleId":"D2","level":"warning","message":{"text":"checker._fit_status (cognitive 27): checker._fit_status has cognitive complexity 27 (threshold 15). Drivers by points: if/else 16, boolean chains 8, ternaries 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":"skills/ppt-master/scripts/template_fill_pptx/checker.py"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"232aa5e271c441432af3dbd3ea6f259579e8a175d8ea568af5af11a13a859d53"}},{"ruleId":"D2","level":"warning","message":{"text":"backend_gemini._generate_image (cognitive 26): backend_gemini._generate_image has cognitive complexity 26 (threshold 15). Drivers by points: if/else 12, ternaries 10, loops 3, 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":"skills/ppt-master/scripts/image_backends/backend_gemini.py"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"4adbd5291e8a5550e70833712719f9079996f282e07c1c3d87524aaf7f1ab2c3"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._flatten_fixed_group (cognitive 26): mirror_template_materialize._flatten_fixed_group has cognitive complexity 26 (threshold 15). Drivers by points: if/else 18, loops 5, boolean chains 3 (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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1288}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6c3750e2a8a946fd43f29164d5553e255ba698678559127742eeae4229578bb"}},{"ruleId":"D2","level":"warning","message":{"text":"native_enhance_pptx_core._resolve_transition_plan (cognitive 26): native_enhance_pptx_core._resolve_transition_plan has cognitive complexity 26 (threshold 15). Drivers by points: if/else 17, boolean chains 7, loops 1, ternaries 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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1459}}}],"partialFingerprints":{"codehealthFindingId/v1":"51bd98ebef1a9fc7053012d76a97f187c16c8da5f539968be33723834d7ef62e"}},{"ruleId":"D2","level":"warning","message":{"text":"project_specs.validate_project_artifacts (cognitive 26): project_specs.validate_project_artifacts has cognitive complexity 26 (threshold 15). Drivers by points: if/else 12, error handling 7, 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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":1234}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd364560254f0d8f76dec4aa52efcae6c668559a663567f44e57501f75ec7ece"}},{"ruleId":"D2","level":"warning","message":{"text":"prompt_audit.find_near_duplicates (cognitive 26): prompt_audit.find_near_duplicates has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15, loops 10, 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3372940f83998aff2eac5fc66970a9593be2b81b7f0693a8c9465f8454651eb"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md.analyze_font_sizes (cognitive 26): pdf_to_md.analyze_font_sizes has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14, loops 12 (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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad84c3cbf06d12173c8d781a7a903615a886ebda5293e45135395a31f26fcb07"}},{"ruleId":"D2","level":"warning","message":{"text":"embed_images._optimize_image_bytes (cognitive 26): embed_images._optimize_image_bytes has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, boolean chains 5, error handling 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":"skills/ppt-master/scripts/svg_finalize/embed_images.py"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dac39409c766a2fd3559107b33fb4612e06ed2fe5b1eb89e8fa0d17a4bdfd96"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_module_bounds_contract (cognitive 26): SVGQualityChecker._check_module_bounds_contract has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13, ternaries 6, boolean chains 3, error handling 2, loops 2 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2307}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4756560828824d4f8609d6dee17a22b1062564bfe1d834f699a0d6f8f5f13ef"}},{"ruleId":"D2","level":"warning","message":{"text":"checker._parse_placeholders_fallback (cognitive 26): checker._parse_placeholders_fallback has cognitive complexity 26 (threshold 15). Drivers by points: if/else 24, boolean chains 1, loops 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":896}}}],"partialFingerprints":{"codehealthFindingId/v1":"45feed371241fdde02487426ac2704bc974b4fc435daed782ca8db9e5e96cf45"}},{"ruleId":"D2","level":"warning","message":{"text":"converter._extract_background_candidate (cognitive 26): converter._extract_background_candidate has cognitive complexity 26 (threshold 15). Drivers by points: if/else 20, boolean chains 3, ternaries 2, loops 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":1076}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c18c746512a253c219dd45dff8009bfc38df8ac4ad70dae6bf7c09c4e8d914d"}},{"ruleId":"D2","level":"warning","message":{"text":"elements.project_image_errors (cognitive 26): elements.project_image_errors has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15, error handling 7, loops 3, boolean chains 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"51df5c81624366954e2f433230661cf8b85bfbc9223217a3eff44e0e39089aac"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_style._native_chart_export_payload (cognitive 26): chart_style._native_chart_export_payload has cognitive complexity 26 (threshold 15). Drivers by points: loops 12, if/else 10, boolean chains 3, ternaries 1 (nesting depth added 10). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"19137558671acedb5a6a362dd662d59e2c98e8077b621eb942b5b5dcd408c66e"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_xml._data_labels_xml (cognitive 26): chart_xml._data_labels_xml has cognitive complexity 26 (threshold 15). Drivers by points: ternaries 14, if/else 6, boolean chains 3, loops 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"804fd494715b83f9694bc2232abd17bce88a84e9616f92417a9453abe30e6978"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._apply_morph_shape_names (cognitive 26): builder._apply_morph_shape_names has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15, loops 8, ternaries 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9b6537787f2f8886f0fe6b49b24b31c2cdbc15db190c9c7ddfcc31163ab6d37"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure._validate_template_slide_contracts (cognitive 26): template_structure._validate_template_slide_contracts has cognitive complexity 26 (threshold 15). Drivers by points: if/else 18, loops 8 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1735}}}],"partialFingerprints":{"codehealthFindingId/v1":"56d4002bba28717c49ada2c480aa5ef30f26865d1d8a92ae24686caacda918ca"}},{"ruleId":"D2","level":"warning","message":{"text":"server._build_session_state (cognitive 25): server._build_session_state has cognitive complexity 25 (threshold 15). Drivers by points: ternaries 14, boolean chains 6, if/else 3, error handling 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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1046}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce6c298c9e33449b4f5dd2a04967cd1acdae2bbf31de4a7d1f8dc1b42258e884"}},{"ruleId":"D2","level":"warning","message":{"text":"image_gen.render_manifest_md (cognitive 25): image_gen.render_manifest_md has cognitive complexity 25 (threshold 15). Drivers by points: if/else 18, boolean chains 4, loops 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":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":1011}}}],"partialFingerprints":{"codehealthFindingId/v1":"a46bbbf3f23a6b90b9c9b19d921da40f97755ae3327949bbe2090f5bbca93f2e"}},{"ruleId":"D2","level":"warning","message":{"text":"native_enhance_pptx_core._used_notes_slide_indices (cognitive 25): native_enhance_pptx_core._used_notes_slide_indices has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, loops 7, 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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"07bc2cfdeb13c4ab706be4fe091698c07a00d982a522452ad45842e27473ff56"}},{"ruleId":"D2","level":"warning","message":{"text":"fill_to_svg._resolve_grad_fill (cognitive 25): fill_to_svg._resolve_grad_fill has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15, boolean chains 5, ternaries 4, loops 1 (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":"skills/ppt-master/scripts/pptx_to_svg/fill_to_svg.py"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"accfaa8e388ae1cc9db441b76cbc9fdbcb8954a9924a389fac3b0771b80abbb1"}},{"ruleId":"D2","level":"warning","message":{"text":"normalized_chart_svg._render_pie (cognitive 25): normalized_chart_svg._render_pie has cognitive complexity 25 (threshold 15). Drivers by points: if/else 11, ternaries 7, 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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b5463390b770f3bfb1533da2ef138efa9452cf595693098327edd3c4811ba2"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._cell_rich_paragraph_payloads (cognitive 25): tbl_to_svg._cell_rich_paragraph_payloads has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, loops 4, ternaries 4, boolean chains 1 (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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1372}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc814c58b4d46f90c0c1c27f7ceea7f2417bbdc6e6ac22f59dc9c0bfb7db503"}},{"ruleId":"D2","level":"warning","message":{"text":"txbody_to_svg._parse_paragraph (cognitive 25): txbody_to_svg._parse_paragraph has cognitive complexity 25 (threshold 15). Drivers by points: if/else 11, ternaries 7, boolean chains 4, error handling 2, loops 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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"28044fc5dfc77cc56316899ef6e0c17320a2af5c31e96889e5e61514e230c231"}},{"ruleId":"D2","level":"warning","message":{"text":"txbody_to_svg._emit_paragraph (cognitive 25): txbody_to_svg._emit_paragraph has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, loops 3, ternaries 3, boolean chains 2 (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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":1185}}}],"partialFingerprints":{"codehealthFindingId/v1":"43a41466394b2fafffedcfabea7008c7f035499c84e5d5a6ff61e4ed6c63a1b9"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md._docx_inject_math_latex (cognitive 25): doc_to_md._docx_inject_math_latex has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, ternaries 5, loops 4, error handling 2, 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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6d932ad2fca30e250d1b0fe8add385beb483665590d2944a8207896086b92ec"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md._find_captioned_vector_figures (cognitive 25): pdf_to_md._find_captioned_vector_figures has cognitive complexity 25 (threshold 15). Drivers by points: if/else 19, loops 5, boolean chains 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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ddabc76cb45bfd6950bf2668a8769de504eaa4c956da5fe96e9a7a8e91d1ab7"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md.merge_markdown_continuation_tables (cognitive 25): pdf_to_md.merge_markdown_continuation_tables has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15, loops 6, boolean chains 2, ternaries 2 (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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":1248}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e38b569df24f6833bf9eae66277e471414fbd32b252e920bc44fdd3475ce808"}},{"ruleId":"D2","level":"warning","message":{"text":"web_to_md.main (cognitive 25): web_to_md.main has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, boolean chains 3, loops 3, ternaries 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":"skills/ppt-master/scripts/source_to_md/web_to_md.py"},"region":{"startLine":915}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca54a72abbd17865b94b10d83b6616aac26edd2355ebc9d05b0be53b9a95681"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._print_anchor_value_summary (cognitive 25): SVGQualityChecker._print_anchor_value_summary has cognitive complexity 25 (threshold 15). Drivers by points: ternaries 10, if/else 7, loops 7, boolean chains 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6821}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a5fb1d10798fb075af19d4161fc5352786b9864543f27d5e92aa28e9c21caed"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_contracts.check_font_size_values (cognitive 25): svg_contracts.check_font_size_values has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10, ternaries 6, error handling 5, loops 3, 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":1050}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7959f0b5bfa50c75fc760f9c162e19963231c5510910a166fd260457ab029bc"}},{"ruleId":"D2","level":"warning","message":{"text":"animation_config._animation_effect_entry_errors (cognitive 25): animation_config._animation_effect_entry_errors has cognitive complexity 25 (threshold 15). Drivers by points: if/else 18, boolean chains 4, error handling 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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":968}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9789246445c4c81266d42cf15126b0f2a74e9d087cd144bd0bce90e35830a4c"}},{"ruleId":"D2","level":"warning","message":{"text":"marker_common._element_local_bbox (cognitive 25): marker_common._element_local_bbox has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, boolean chains 4, loops 2, ternaries 2 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"91621bc91e6cd00bb81fdb4496c566b9ead2c7bfabc67f302a2702a2aeaa71e0"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._apply_preserved_structure (cognitive 25): builder._apply_preserved_structure has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, loops 5, ternaries 3, boolean chains 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":2936}}}],"partialFingerprints":{"codehealthFindingId/v1":"4195ee28c20061c0a5fce252307d837f7be645ab160fbf36b20b0ded74e01c0f"}},{"ruleId":"D2","level":"warning","message":{"text":"beautify_identity._sample_observed (cognitive 24): beautify_identity._sample_observed has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10, loops 10, boolean chains 4 (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":"skills/ppt-master/scripts/beautify_identity.py"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a20e94b4d3af6979093f597e05ee7bbc5a5a93a40e9909a26ee40edd02fb42a"}},{"ruleId":"D2","level":"warning","message":{"text":"extract_svg_assets.main (cognitive 24): extract_svg_assets.main has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7, ternaries 7, error handling 6, boolean chains 3, loops 1 (nesting depth added 3). 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":"skills/ppt-master/scripts/extract_svg_assets.py"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"3810c4c763c07fb5b00e8e3a44be377cfa1127205b133ac3ee7281e4dc9bf51f"}},{"ruleId":"D2","level":"warning","message":{"text":"provider_common.score_candidate (cognitive 24): provider_common.score_candidate has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, boolean chains 7, 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":"skills/ppt-master/scripts/image_sources/provider_common.py"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a07f49e0f54b8eb6b58a229e3aee2f286f7449a2a150fd9e97a27c7d173e92c"}},{"ruleId":"D2","level":"warning","message":{"text":"native_enhance_pptx_core._source_state_errors (cognitive 24): native_enhance_pptx_core._source_state_errors has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13, boolean chains 7, ternaries 2, error handling 1, 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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c587aa08a21bb03e3dabed69a8af2f687601499af9cc3eb9549aa16af3178ce"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._normalize_target_mapping (cognitive 24): pptx_animations._normalize_target_mapping has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10, ternaries 9, boolean chains 5 (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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":850}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5abc02def0b1d88bdafdf3249f22408ea90fb278a74d9b3f1e3a63a0c66b954"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_template_import.main (cognitive 24): pptx_template_import.main has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12, error handling 7, ternaries 3, boolean chains 2 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_template_import.py"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"38766b00ca0098d86e8d32a67ba4a58487a4a3d43b3295bcd36bafbbdade355f"}},{"ruleId":"D2","level":"warning","message":{"text":"fill_to_svg._pattern_foreground (cognitive 24): fill_to_svg._pattern_foreground has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14, ternaries 8, error handling 2 (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, 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":"skills/ppt-master/scripts/pptx_to_svg/fill_to_svg.py"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"661f4689ce15cd33b73b11c5d4020f85b25d799d2af26ae2e52924a394d10905"}},{"ruleId":"D2","level":"warning","message":{"text":"pic_to_svg._apply_blip_image_effects (cognitive 24): pic_to_svg._apply_blip_image_effects has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12, boolean chains 5, error handling 3, ternaries 3, loops 1 (nesting depth added 4). 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":"skills/ppt-master/scripts/pptx_to_svg/pic_to_svg.py"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"71aa0674ad737fcf570ff17bff169100c01ef1060f1b6d3aa3db5a0bc32a878a"}},{"ruleId":"D2","level":"warning","message":{"text":"shape_walker._build_placeholder_xfrm_table (cognitive 24): shape_walker._build_placeholder_xfrm_table has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, loops 6, boolean chains 2 (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":"skills/ppt-master/scripts/pptx_to_svg/shape_walker.py"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd76f04e2a4440a55a44e9166122d3a9ecae5edbcac58f6e93cc6d574509f88d"}},{"ruleId":"D2","level":"warning","message":{"text":"slide_to_svg._convert_graphic_fallback (cognitive 24): slide_to_svg._convert_graphic_fallback has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15, ternaries 7, error handling 2 (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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":1064}}}],"partialFingerprints":{"codehealthFindingId/v1":"98c01bb32708b4d98ba20b34291dcdbcfeeee6d8482f73097c153e2eaf765acb"}},{"ruleId":"D2","level":"warning","message":{"text":"prompt_audit.run_audit (cognitive 24): prompt_audit.run_audit has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, boolean chains 4, loops 3, 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1470}}}],"partialFingerprints":{"codehealthFindingId/v1":"c49407a2cbb460d8d0c423fabb00d03ea1af8724457032d19278f1648dfbfba2"}},{"ruleId":"D2","level":"warning","message":{"text":"prompt_audit.render_text (cognitive 24): prompt_audit.render_text has cognitive complexity 24 (threshold 15). Drivers by points: if/else 9, loops 9, ternaries 4, 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1690}}}],"partialFingerprints":{"codehealthFindingId/v1":"d03be6491c9f2d1cf69f8f770fc26696d11c5a4a22d61766ff3e1bd4ec0ba7a8"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._extract_image_resource_rows (cognitive 24): SVGQualityChecker._extract_image_resource_rows has cognitive complexity 24 (threshold 15). Drivers by points: if/else 19, boolean chains 2, ternaries 2, loops 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":5410}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a127ecb3ab2103dd3f001c63c67298683ae983c3ac7d1b5138adbee9d4b54d7"}},{"ruleId":"D2","level":"warning","message":{"text":"table._table_cell_paragraphs (cognitive 24): table._table_cell_paragraphs has cognitive complexity 24 (threshold 15). Drivers by points: if/else 20, boolean chains 3, 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"73ed08bbdc97d768429d4f889413fed1e9c3117386d0d8fa117e46d94d5490ed"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure.match_native_placeholders (cognitive 24): template_structure.match_native_placeholders has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13, loops 6, ternaries 3, boolean chains 2 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":3269}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31072b9defe85fa780bcc422f39b2cb627a6e6c806c9e0b97a66fca58df3a9e"}},{"ruleId":"D2","level":"warning","message":{"text":"_LocalUseExpander._materialize_use (cognitive 24): _LocalUseExpander._materialize_use has cognitive complexity 24 (threshold 15). Drivers by points: if/else 18, boolean chains 3, loops 3 (nesting depth added 4). 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":"skills/ppt-master/scripts/svg_to_pptx/use_expander.py"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"a40f507782468fc2371582cf2b54d546752741783de98625e41d5e2367bb1e71"}},{"ruleId":"D2","level":"warning","message":{"text":"_LocalUseExpander._validate_fragment_reference_syntax (cognitive 24): _LocalUseExpander._validate_fragment_reference_syntax has cognitive complexity 24 (threshold 15). Drivers by points: if/else 18, loops 6 (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":"skills/ppt-master/scripts/svg_to_pptx/use_expander.py"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e5a86e876f625a2c9d9907b964f279fb3baa9ab85f98df6d7d0556f4ee4802f"}},{"ruleId":"D2","level":"warning","message":{"text":"template_preview_pptx._write_review_svg (cognitive 24): template_preview_pptx._write_review_svg has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, loops 6, boolean chains 2 (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":"skills/ppt-master/scripts/template_preview_pptx.py"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"304d9d1ec7501f908b397091980c2d452658dd4b5df051e31b3ae81db10efd96"}},{"ruleId":"D2","level":"warning","message":{"text":"server._typography_error (cognitive 23): server._typography_error has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, loops 4, boolean chains 2, ternaries 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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"a63adeb840149f28f3fa548f956624381c0027f9d334f8f27d7ad33292c06e6c"}},{"ruleId":"D2","level":"warning","message":{"text":"finalize_svg._publish_candidate_directory (cognitive 23): finalize_svg._publish_candidate_directory has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, error handling 5, boolean chains 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":"skills/ppt-master/scripts/finalize_svg.py"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"7210aa70728acdeecc0d5445209ffdf0e18ed5e29e09794468f47de80e5907e2"}},{"ruleId":"D2","level":"warning","message":{"text":"image_search._save_candidates_pool (cognitive 23): image_search._save_candidates_pool has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, ternaries 6, error handling 5, boolean chains 1, loops 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"e61635dc1f03c84ea98f46baf637a28af13ab59cc1800a89f1a78c15a72b6a1b"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_delivery_check._relationship_inventory (cognitive 23): pptx_delivery_check._relationship_inventory has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 3, error handling 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":"skills/ppt-master/scripts/pptx_delivery_check.py"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"81fa7e6f7901fb16789d6ba51f305f6dc540164b575f894c190329880e1216b1"}},{"ruleId":"D2","level":"warning","message":{"text":"formula._apply_operator (cognitive 23): formula._apply_operator has cognitive complexity 23 (threshold 15). Drivers by points: if/else 17, ternaries 6 (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":"skills/ppt-master/scripts/pptx_shapes/formula.py"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"a19528936615c7852f55f026a1f3b992ed9ee18150cfd9f5dd8433938ddda287"}},{"ruleId":"D2","level":"warning","message":{"text":"page_context.build_page_context (cognitive 23): page_context.build_page_context has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13, ternaries 5, boolean chains 2, error handling 2, loops 1 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/project_management/page_context.py"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2e2fc9ad690ea6599d883712c9b6713d475895f56c62f8b28b5ebc7c506412c"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_authoring_view.main (cognitive 23): svg_authoring_view.main has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13, error handling 4, boolean chains 3, ternaries 2, loops 1 (nesting depth added 2). 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":"skills/ppt-master/scripts/svg_authoring_view.py"},"region":{"startLine":962}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddb469b6149c577981962bdd3049480fa2f854bb1e77397ee46955899498bf56"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_viewbox (cognitive 23): SVGQualityChecker._check_viewbox has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, boolean chains 3, error handling 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":1315}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2fb88e176ea5ee93b9baaaf0b76ccad9a370eb8cf745b526f84df22e0baa896"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._positioned_text_lines (cognitive 23): SVGQualityChecker._positioned_text_lines has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9, boolean chains 6, error handling 5, ternaries 2, loops 1 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":1817}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8781ce2db1ec37233420a5d9b7a03979f528e046d551bb8edb6dc30466aeb76"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_pattern_fills (cognitive 23): SVGQualityChecker._check_pattern_fills has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, boolean chains 5, loops 2, ternaries 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3424}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d348a971505209d3a4913e06974b00fc3a6de34c30643607501c8ba1e1243ad"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_sourced_image_attribution (cognitive 23): SVGQualityChecker._check_sourced_image_attribution has cognitive complexity 23 (threshold 15). Drivers by points: boolean chains 10, if/else 10, ternaries 2, 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":4500}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5eea9cea8b659f176ee00256a33db59d66f827673569063ed56fe54454e4628"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._load_project_svg_image_references (cognitive 23): SVGQualityChecker._load_project_svg_image_references has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, loops 3, boolean chains 2, error handling 2 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":5550}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fe95a602723853783fce10c6a3c8fcd9b5b71ee78d17b2afd007451b25b1fe4"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_sourced_image_provenance (cognitive 23): SVGQualityChecker._check_sourced_image_provenance has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, boolean chains 7, 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6104}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b05ed706512904119dfc22aa0fd6fe74152ee70c97fabca2db0a2440d355f61"}},{"ruleId":"D2","level":"warning","message":{"text":"converter._build_source_shape_id_map (cognitive 23): converter._build_source_shape_id_map has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 3, error handling 2 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":1135}}}],"partialFingerprints":{"codehealthFindingId/v1":"6789ec6bf804b9fffd57b649a3745bf958d029c27df4af3dc76a27a22d5ffffb"}},{"ruleId":"D2","level":"warning","message":{"text":"elements._resolve_nested_svg_clip_geometry (cognitive 23): elements._resolve_nested_svg_clip_geometry has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, boolean chains 8, ternaries 4 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":4819}}}],"partialFingerprints":{"codehealthFindingId/v1":"4732286a7d3d2e0c303b89ef721b64140245be021c01b9ec08864336e62818fe"}},{"ruleId":"D2","level":"warning","message":{"text":"paths._project_path_like_bounds (cognitive 23): paths._project_path_like_bounds has cognitive complexity 23 (threshold 15). Drivers by points: if/else 17, ternaries 3, loops 2, boolean chains 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bff5b120c697228ab5160349d68331846985325057cdb09abd2c8f6839e7afb"}},{"ruleId":"D2","level":"warning","message":{"text":"text_properties.project_text_property_diagnostics (cognitive 23): text_properties.project_text_property_diagnostics has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12, loops 7, boolean chains 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/text_properties.py"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aff4363a43450054de74698364c5101ced3ce256515d3827971345eac04313d"}},{"ruleId":"D2","level":"warning","message":{"text":"utils._parse_transform_operations (cognitive 23): utils._parse_transform_operations has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 2, ternaries 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":727}}}],"partialFingerprints":{"codehealthFindingId/v1":"645065c0962ccd4ecab2195847801802675b2578b00874ef90c86ad2b51cf38e"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure.parse_optional_layout_slides (cognitive 23): template_structure.parse_optional_layout_slides has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, boolean chains 6, error handling 2, 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1813}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaca629c07169545b5fd474f0acf6a368de88141612d8512bd7560e37f09a914"}},{"ruleId":"D2","level":"warning","message":{"text":"shape_boolean._close_filled_commands (cognitive 23): shape_boolean._close_filled_commands has cognitive complexity 23 (threshold 15). Drivers by points: if/else 22, 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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":879}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee6c3f9cb88f44671ad5ba4e4a36ed135fe35969a460dcbb8c0b10bac86601e1"}},{"ruleId":"D2","level":"warning","message":{"text":"native_enhance_pptx_core._validate_plan_modules (cognitive 22): native_enhance_pptx_core._validate_plan_modules has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, boolean chains 7, 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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1390}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfae68a87113b3b8ac866a15a26af125781d97acb92ee45c867cd55cfe03b0ec"}},{"ruleId":"D2","level":"warning","message":{"text":"normalized_chart_svg._category_segments (cognitive 22): normalized_chart_svg._category_segments has cognitive complexity 22 (threshold 15). Drivers by points: loops 8, ternaries 8, if/else 6 (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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"89b918e57cf9af50b6048b06b9025d601da6421b0111ad99fb8b4c883a5ff817"}},{"ruleId":"D2","level":"warning","message":{"text":"pic_to_svg.convert_blip_fill (cognitive 22): pic_to_svg.convert_blip_fill has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, boolean chains 5, 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":"skills/ppt-master/scripts/pptx_to_svg/pic_to_svg.py"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"687d51d4ee6ced499fcee19c884a5dc0424fcd34ed6c16e6343f59afde234b2a"}},{"ruleId":"D2","level":"warning","message":{"text":"preset_authoring._validate_adjustments (cognitive 22): preset_authoring._validate_adjustments has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, error handling 3, boolean chains 2, loops 2 (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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":738}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f0e0d27638282d39ef0a1aa61ba3e94ef684e0a83b58e9daed26c9a2b4402f4"}},{"ruleId":"D2","level":"warning","message":{"text":"slide_to_svg._build_geometry_xml (cognitive 22): slide_to_svg._build_geometry_xml has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, error handling 4, boolean chains 1, 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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab203c45125d7ee06f63d591af087081cf24854e0300d04e51fa04c6a2cecd09"}},{"ruleId":"D2","level":"warning","message":{"text":"project_specs.parse_spec_lock_image_value (cognitive 22): project_specs.parse_spec_lock_image_value has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, boolean chains 3, ternaries 3, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"f789d831fd9dfe189ab38198d2fa9adefdcc36ad93750446df62659248ee41d9"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md._convert_epub (cognitive 22): doc_to_md._convert_epub has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, loops 4, error handling 3, boolean chains 2 (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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":1185}}}],"partialFingerprints":{"codehealthFindingId/v1":"c39947ad7270ea8024cf727642102958bf082f9f4339c04dfb83ef1084377195"}},{"ruleId":"D2","level":"warning","message":{"text":"flatten_tspan._emit_mergeable_paragraph (cognitive 22): flatten_tspan._emit_mergeable_paragraph has cognitive complexity 22 (threshold 15). Drivers by points: loops 12, if/else 8, error handling 2 (nesting depth added 9). 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":"skills/ppt-master/scripts/svg_finalize/flatten_tspan.py"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"009d859ad0e3e9f9e472d5460815b21d8985ebf7afe085c59e799df8a3db1405"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._resolved_single_line_text_runs (cognitive 22): SVGQualityChecker._resolved_single_line_text_runs has cognitive complexity 22 (threshold 15). Drivers by points: boolean chains 9, if/else 7, loops 3, ternaries 3 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":1607}}}],"partialFingerprints":{"codehealthFindingId/v1":"4774a24bd24ac3b9f0cec3ab82f67fc561724f84e7b024f93f922c75584edaa7"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_pptx_structure_metadata (cognitive 22): SVGQualityChecker._check_pptx_structure_metadata has cognitive complexity 22 (threshold 15). Drivers by points: if/else 19, 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3657}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e51b93e6be6244f0a5682cb27e519e17ea13d7ebed8b3a9e1b78f908118e524"}},{"ruleId":"D2","level":"warning","message":{"text":"elements._valid_wmf_payload (cognitive 22): elements._valid_wmf_payload has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, boolean chains 5, loops 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cae2f04b78a1f12eb5bbf9d81897b6f39507f9ca461cfbf63ee0630417c37f9"}},{"ruleId":"D2","level":"warning","message":{"text":"geometry_properties.materialize_inline_geometry_properties (cognitive 22): geometry_properties.materialize_inline_geometry_properties has cognitive complexity 22 (threshold 15). Drivers by points: if/else 19, loops 3 (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":"skills/ppt-master/scripts/svg_to_pptx/geometry_properties.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"d37b18951b0cdce9d598282c191317e9b026c37c862e44fff929ae8ccc29d5ef"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_data._xy_chart_data (cognitive 22): chart_data._xy_chart_data has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, boolean chains 6, loops 1 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":1203}}}],"partialFingerprints":{"codehealthFindingId/v1":"96b2b23a34c54f3c5e1df1bca3bc9ec2e8ec6b7b2b1a581eb43555456dad76a9"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._extract_baseline_layout_families (cognitive 22): builder._extract_baseline_layout_families has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10, loops 8, boolean chains 2, ternaries 2 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1329}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e96601b76eec1ad057d235b18b1b2127387482f377addd7edb45d106736d3b1"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._prepare_flat_structure (cognitive 22): builder._prepare_flat_structure has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, boolean chains 5, ternaries 3, loops 1 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":3648}}}],"partialFingerprints":{"codehealthFindingId/v1":"a486b4bdd7e4a414630ba311781839076944e96a99b592b814bd82185c5d0de1"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._prerender_legacy_pngs (cognitive 22): builder._prerender_legacy_pngs has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9, ternaries 7, loops 3, error handling 2, 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":4428}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b948fb080d5f267dcd4e49c4aca3970e191bca341235a9c6d7d0f9749bc5cef"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure._scope_css_signature (cognitive 22): template_structure._scope_css_signature has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, loops 5, boolean chains 1 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":2467}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a63cc5c962f7b7a77825253ccd5a97e2579bcfc232c7901e8a4f7406938eacd"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure._scope_visual_resources_signature (cognitive 22): template_structure._scope_visual_resources_signature has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, loops 6, boolean chains 2, ternaries 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":2521}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7337c6c59dab5bae492d51ab67e3f6b1f4664576aa8c8a36469fee43c73a194"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_fill._apply_chart_edits_to_slide_package (cognitive 22): chart_fill._apply_chart_edits_to_slide_package has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, ternaries 6, boolean chains 1, loops 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":"skills/ppt-master/scripts/template_fill_pptx/chart_fill.py"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"fea896ae877dcbd9ec78feb68bfdbf8a022be8c52a44d61607465b181dcf36e4"}},{"ruleId":"D2","level":"warning","message":{"text":"edit_safety._table_merge_topology (cognitive 22): edit_safety._table_merge_topology has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11, loops 10, 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":"skills/ppt-master/scripts/template_fill_pptx/edit_safety.py"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"70b8c4c6d21d56e2841711b710e6ce0f5b3ef0609c7c1178b3182e708bc5b85f"}},{"ruleId":"D2","level":"warning","message":{"text":"analyze_images.print_results (cognitive 21): analyze_images.print_results has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, loops 8, 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":"skills/ppt-master/scripts/analyze_images.py"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"e657df0095efd69dd0cab7a0b0072044cafb4e944a1ca4c8e4da885279839b98"}},{"ruleId":"D2","level":"warning","message":{"text":"backend_common.find_data_uri (cognitive 21): backend_common.find_data_uri has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, ternaries 4, loops 2 (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":"skills/ppt-master/scripts/image_backends/backend_common.py"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"f27af23e07d1627b5131878075d3374f6d57bfd19d025efcf7486062a43f6e9d"}},{"ruleId":"D2","level":"warning","message":{"text":"image_search._commit_staged_image (cognitive 21): image_search._commit_staged_image has cognitive complexity 21 (threshold 15). Drivers by points: error handling 10, if/else 10, 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c1c2d29de55e952d19ece5ebe01ee8d2dd25b4f90edd687a41ead972a4a072d"}},{"ruleId":"D2","level":"warning","message":{"text":"provider_wikimedia.parse_results (cognitive 21): provider_wikimedia.parse_results has cognitive complexity 21 (threshold 15). Drivers by points: boolean chains 12, if/else 8, loops 1 (nesting depth added 4). 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":"skills/ppt-master/scripts/image_sources/provider_wikimedia.py"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"258438e597c55b1d8ac018872fb7679cee31600281668f864b08c5a8a7e530a0"}},{"ruleId":"D2","level":"warning","message":{"text":"latex_render._process_item (cognitive 21): latex_render._process_item has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, boolean chains 7, error handling 1, ternaries 1 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/latex_render.py"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"65ed960888f2cae27a1fe7602d2234459ed8e16c32eb4795b6c1daf73318bb03"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._load_vector_assets (cognitive 21): mirror_template_materialize._load_vector_assets has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e4218c651a44f4515e4996524cc7b6b0484cbd8bfbc678f97af7bf444a338a8"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._namespace_ids (cognitive 21): mirror_template_materialize._namespace_ids has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, loops 4, boolean chains 2 (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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1169}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e8534e83dd9a17eb927afe6238f4b1cf83bef93e7515664220b6b43862489dd"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._visible_leaf (cognitive 21): mirror_template_materialize._visible_leaf has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, error handling 4, loops 2, 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1236}}}],"partialFingerprints":{"codehealthFindingId/v1":"b949454455166ae01c9a9cc0e778da35097375e44c97371ba742f7a8546de4e9"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._resolved_shape_paint (cognitive 21): chart_to_svg._resolved_shape_paint has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, boolean chains 3, loops 1, ternaries 1 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":738}}}],"partialFingerprints":{"codehealthFindingId/v1":"01dfd4a0fea5494220554b2ae663aa6b4f79f5ced8050771c0d970c08d23f27a"}},{"ruleId":"D2","level":"warning","message":{"text":"converter._referenced_local_paths (cognitive 21): converter._referenced_local_paths has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, error handling 5, loops 3, 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":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":556}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbc851c84c4a0d144f18370746bc779a8baa1f501bef0485ecda14f55fa482e4"}},{"ruleId":"D2","level":"warning","message":{"text":"normalized_chart_svg._render_category (cognitive 21): normalized_chart_svg._render_category has cognitive complexity 21 (threshold 15). Drivers by points: ternaries 10, if/else 8, boolean chains 3 (nesting depth added 4). 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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b3996f1f4e512b58d513e16d6814cccec86849acdb78ecd52a59c36419675ff"}},{"ruleId":"D2","level":"warning","message":{"text":"preset_authoring.render_preset_shape_fragment (cognitive 21): preset_authoring.render_preset_shape_fragment has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, boolean chains 6, loops 1 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d24a484066acefea4310c8fd4e759f86415c810e80da25d680e6095d045aabe"}},{"ruleId":"D2","level":"warning","message":{"text":"txbody_to_svg.convert_vertical_txbody (cognitive 21): txbody_to_svg.convert_vertical_txbody has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10, boolean chains 4, loops 4, ternaries 3 (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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa0ff5d3ceeb4380764598d4c677b264bde586a770a1e3d244adec43de3da996"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md.merge_adjacent_headings (cognitive 21): pdf_to_md.merge_adjacent_headings has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 3 (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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2ec7867c31b264468c090c85a1257487a0e5ef89bfd67b53284eb572e774e95"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md.should_keep_image (cognitive 21): pdf_to_md.should_keep_image has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, boolean chains 9, ternaries 1 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ce165775c923fb3beb4bfd1b27940e8f772ccf1727115e9dcedfd0c2310d2a8"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md.detect_vector_figure_rects (cognitive 21): pdf_to_md.detect_vector_figure_rects has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, loops 3, 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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"abb02cd57851f2ef3ee60167ec381728c1ee3a5ad80b12c772588771136faee0"}},{"ruleId":"D2","level":"warning","message":{"text":"ppt_to_md._unexposed_chartex_markdown (cognitive 21): ppt_to_md._unexposed_chartex_markdown has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, boolean chains 4, loops 3, ternaries 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":"skills/ppt-master/scripts/source_to_md/ppt_to_md.py"},"region":{"startLine":716}}}],"partialFingerprints":{"codehealthFindingId/v1":"48f282a88ce3415a082658767c3f457c0f5effea3cdb5efb920712a274607f4b"}},{"ruleId":"D2","level":"warning","message":{"text":"annotations.promote_tspan_to_text (cognitive 21): annotations.promote_tspan_to_text has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, boolean chains 6, loops 3 (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":"skills/ppt-master/scripts/svg_editor/annotations.py"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea9cb8b316206bc958c738dbcfbaeb29cb90fd98f3f40c2a7cce3a64d7d4019a"}},{"ruleId":"D2","level":"warning","message":{"text":"server._inline_icons (cognitive 21): server._inline_icons has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 4, error handling 2, 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":"skills/ppt-master/scripts/svg_editor/server.py"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e56d627ea8ef0b2a8e702fa04b30742e2af4c85873c79c453df1156ace449b9"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker.check_file (cognitive 21): SVGQualityChecker.check_file has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, error handling 3, ternaries 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":1087}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fe5e63e49cae1e6b587dfd9f281f0985eff463ece79f00767e9027dd84b665f"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_fragmented_paragraph_text (cognitive 21): SVGQualityChecker._check_fragmented_paragraph_text has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 3, boolean chains 2, error handling 1, ternaries 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2498}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9e4950c8e08d384efa9efc10bf047321dfc22606f1a5f395fc689e2b7d316eb"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._fixed_layer_group_errors (cognitive 21): SVGQualityChecker._fixed_layer_group_errors has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, loops 8 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":5182}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f44f0629e3829836d6a0a25d5af4d31a7bc9304083678f74fd361f70c330114"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_contracts.check_opacity_values (cognitive 21): svg_contracts.check_opacity_values has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, error handling 4, loops 3, ternaries 2, 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5f0556f2d9e3817d0372a3720cd612db878b8962baea269344da8d296aca79c"}},{"ruleId":"D2","level":"warning","message":{"text":"elements.convert_line (cognitive 21): elements.convert_line has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, ternaries 6, boolean chains 2 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1518}}}],"partialFingerprints":{"codehealthFindingId/v1":"114c49bd3e21305f993ce38ec32d137f4d2c30c64a50ee74137018e5cfe2b9b6"}},{"ruleId":"D2","level":"warning","message":{"text":"text_properties.materialize_project_text_metrics (cognitive 21): text_properties.materialize_project_text_metrics has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, loops 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/text_properties.py"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"5622cce2b1035946ec2136fe34e5c8e2b84a583d11df7818087a6a34c0665949"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_xml._axis_pair_xml (cognitive 21): chart_xml._axis_pair_xml has cognitive complexity 21 (threshold 15). Drivers by points: ternaries 14, if/else 4, boolean chains 3. 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"95293c93918c9f7a4393b2eb4d57ce9e0d88f6db0313ad1de662ed6580f248bc"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._prune_unused_slide_layouts (cognitive 21): builder._prune_unused_slide_layouts has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, loops 4, boolean chains 1 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":3498}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5824c305b002e9e5faef73954f47d8e4a1d10ce52616512046a13bcabed7ce2"}},{"ruleId":"D2","level":"warning","message":{"text":"template_validation._validate_unique_creation_ids (cognitive 21): template_validation._validate_unique_creation_ids has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, error handling 3, loops 3, 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_validation.py"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3b24b17d562060f8529876ed0bd37b6337a8520aa2e5d7a2f36c95211bec45f"}},{"ruleId":"D2","level":"warning","message":{"text":"diagram_read.smartart_to_markdown (cognitive 21): diagram_read.smartart_to_markdown has cognitive complexity 21 (threshold 15). Drivers by points: boolean chains 9, if/else 9, loops 2, ternaries 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":"skills/ppt-master/scripts/template_fill_pptx/diagram_read.py"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d49ada6a703ab4e4bb58e3e48e233a1c0382583be8cad5058ce0dd717402e22"}},{"ruleId":"D2","level":"warning","message":{"text":"notes._find_notes_master_target (cognitive 21): notes._find_notes_master_target has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, loops 4, error handling 3, 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":"skills/ppt-master/scripts/template_fill_pptx/notes.py"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5598f4589ba61b096a1d0ca9a20752d2958753dadc6b3750b75a3a8d9f32c17"}},{"ruleId":"D2","level":"warning","message":{"text":"template_preview_pptx._carrier_sizes (cognitive 21): template_preview_pptx._carrier_sizes has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, loops 6, ternaries 4 (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":"skills/ppt-master/scripts/template_preview_pptx.py"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"d24abb7382f77abd8c51dadbf463338648b4a66106e29891c3991cdf4aa3b29f"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_recall._score_candidate (cognitive 20): chart_recall._score_candidate has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 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":"skills/ppt-master/scripts/chart_recall.py"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d2dbc3605b00442f38405b5b3005291201362f06de1c831890b0316f0713e57"}},{"ruleId":"D2","level":"warning","message":{"text":"backend_common.save_image_bytes (cognitive 20): backend_common.save_image_bytes has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 5 (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":"skills/ppt-master/scripts/image_backends/backend_common.py"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"3efd58efa3dd78b77b6f0cb5df9aa221d1906f9e336bd19d38de17950e7efa8f"}},{"ruleId":"D2","level":"warning","message":{"text":"backend_openai._edit_image (cognitive 20): backend_openai._edit_image has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, ternaries 4, boolean chains 1 (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":"skills/ppt-master/scripts/image_backends/backend_openai.py"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2e45915e823d51022b1623ac227b2639ead46537fb09616213d841ef6f10641"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._publish_files (cognitive 20): mirror_template_materialize._publish_files has cognitive complexity 20 (threshold 15). Drivers by points: error handling 7, loops 7, if/else 6 (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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":2563}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f93e03081dd51402d687d8f5e2d70e5abcb9e21ab75b487ba0656639646f179"}},{"ruleId":"D2","level":"warning","message":{"text":"preset_authoring.materialize_compact_authored_preset_tree (cognitive 20): preset_authoring.materialize_compact_authored_preset_tree has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10, loops 7, 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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bfef3f52974edfbfac5dfbf7053d7c74bebd831b9fd5b87c94ca73cf0fe34ec"}},{"ruleId":"D2","level":"warning","message":{"text":"shape_walker._build_placeholder_lst_style_table (cognitive 20): shape_walker._build_placeholder_lst_style_table has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, loops 6, 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":"skills/ppt-master/scripts/pptx_to_svg/shape_walker.py"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"aba8fb26fe8d5d430ddbce7fcc163d63e0391771dfca0b20d46711387f4630f6"}},{"ruleId":"D2","level":"warning","message":{"text":"slide_to_svg._effective_placeholder_tx_body (cognitive 20): slide_to_svg._effective_placeholder_tx_body has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 2 (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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f03ed8b21957b2d2a462e10f5a49bd669b61029888e4b441a6e3914c587de1d"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._table_tx_style_run_props (cognitive 20): tbl_to_svg._table_tx_style_run_props has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8, ternaries 6, boolean chains 3, loops 3 (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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"2afa2ccce71535843ffa28ff9601dc3be3387fe10ff5412d1a859e5d626ca1a7"}},{"ruleId":"D2","level":"warning","message":{"text":"project_specs._validate_strict_data_surface (cognitive 20): project_specs._validate_strict_data_surface has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, loops 4, boolean chains 2 (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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":911}}}],"partialFingerprints":{"codehealthFindingId/v1":"babc92a914807e84081c8df8ceeeefe7bca1131babc37bb60e809cd9997fac9f"}},{"ruleId":"D2","level":"warning","message":{"text":"register_template._print_completion_card (cognitive 20): register_template._print_completion_card has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10, boolean chains 7, loops 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":"skills/ppt-master/scripts/register_template.py"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"760c1a9e5a4145052c84a9facd60787c125c3efd429638ec9c3a9a900cd1e7cc"}},{"ruleId":"D2","level":"warning","message":{"text":"embed_icons.process_svg_file (cognitive 20): embed_icons.process_svg_file has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, ternaries 4, 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":"skills/ppt-master/scripts/svg_finalize/embed_icons.py"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f1997c4ea8741c1dc1ce2c2889b7da579b16dbfb7b0d7603249d631607e5dd2"}},{"ruleId":"D2","level":"warning","message":{"text":"flatten_tspan._create_text_element_from_line (cognitive 20): flatten_tspan._create_text_element_from_line has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, loops 4, 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":"skills/ppt-master/scripts/svg_finalize/flatten_tspan.py"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd45730fe7b3c025c749203d6f72eaf2a4553275e464a70de948e3009d87b59"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._image_crop_mechanisms (cognitive 20): SVGQualityChecker._image_crop_mechanisms has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, boolean chains 3, loops 3, ternaries 2 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":5611}}}],"partialFingerprints":{"codehealthFindingId/v1":"6498971d8264b0437a085f8cb40ab6053e45f7273c381155669115d4f777b755"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._solid_background_xml_from_shape (cognitive 20): builder._solid_background_xml_from_shape has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, boolean chains 6, error handling 1, loops 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1853}}}],"partialFingerprints":{"codehealthFindingId/v1":"45e64c0b6a152d5299e9a60cd8a322c8fc227e9c8dc076c2f07b91d489360e6f"}},{"ruleId":"D2","level":"warning","message":{"text":"text_outline._resolve_text_style (cognitive 20): text_outline._resolve_text_style has cognitive complexity 20 (threshold 15). Drivers by points: error handling 7, if/else 7, ternaries 3, boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/text_outline.py"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed7aa095da1e6c3634b31fb01d62e50eac6db1dc7f3d6f40ec29d85f4e54989f"}},{"ruleId":"D2","level":"warning","message":{"text":"text_outline._font_candidates (cognitive 20): text_outline._font_candidates has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11, loops 9 (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":"skills/ppt-master/scripts/svg_to_pptx/text_outline.py"},"region":{"startLine":757}}}],"partialFingerprints":{"codehealthFindingId/v1":"c509fa4dde452efa48fb334957beca9292a65ff6a76bd924f059567482b262ab"}},{"ruleId":"D2","level":"warning","message":{"text":"_LocalUseExpander._rewrite_clone_ids (cognitive 20): _LocalUseExpander._rewrite_clone_ids has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, loops 4, boolean chains 1 (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":"skills/ppt-master/scripts/svg_to_pptx/use_expander.py"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"4de8493d8d2877795bbb4163b5dbba150df06d80492bee518399447cf72bf206"}},{"ruleId":"D2","level":"warning","message":{"text":"template_preview_pptx.main (cognitive 20): template_preview_pptx.main has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11, boolean chains 4, ternaries 4, error handling 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":"skills/ppt-master/scripts/template_preview_pptx.py"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"633b94851ff8dd7377113520c10c5ca38848596e1bb2766919a1ba9c6e3491e1"}},{"ruleId":"D2","level":"warning","message":{"text":"beautify_identity._layout_text_sizes (cognitive 19): beautify_identity._layout_text_sizes has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 3, ternaries 3, boolean chains 2 (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":"skills/ppt-master/scripts/beautify_identity.py"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"88bfa57ccfad97e5d54df021642f65adbd856509abb3a20c8c25fa379031f929"}},{"ruleId":"D2","level":"warning","message":{"text":"backend_openai._generate_image (cognitive 19): backend_openai._generate_image has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, ternaries 3, boolean chains 1 (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":"skills/ppt-master/scripts/image_backends/backend_openai.py"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"1242c8743116f002b4fdd99b1dcffe04b0d53e216c473665473790237614b820"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._validate_source_ref_closure (cognitive 19): mirror_template_materialize._validate_source_ref_closure has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 7, boolean chains 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":738}}}],"partialFingerprints":{"codehealthFindingId/v1":"1824b1ed873894a40887a544e83ecbeb108e7073d683175ca0c8dca217da19cb"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorPalette._load_scheme (cognitive 19): ColorPalette._load_scheme has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, boolean chains 6, error handling 2, 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":"skills/ppt-master/scripts/pptx_to_svg/color_resolver.py"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4a061c317518eb0ecaa6fbfd0ae070ef66951f77078aa4a5cbfc29a904fe7c"}},{"ruleId":"D2","level":"warning","message":{"text":"converter._overlay_staged_tree (cognitive 19): converter._overlay_staged_tree has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 3, 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":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":652}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7a710b7f10a4284f7cbb7c2435a7c8a7fbdc4b2b5f9b1d2396cd84bb4213903"}},{"ruleId":"D2","level":"warning","message":{"text":"OoxmlPackage.iter_all_layouts_with_parent (cognitive 19): OoxmlPackage.iter_all_layouts_with_parent has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, loops 3, 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":"skills/ppt-master/scripts/pptx_to_svg/ooxml_loader.py"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"90083c4c4605129818a126db3b17bdb32b761c167ec2917fceafc8b5bbcf2e4a"}},{"ruleId":"D2","level":"warning","message":{"text":"preset_authoring.validate_authored_preset_tree (cognitive 19): preset_authoring.validate_authored_preset_tree has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 2, loops 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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc76a378e3721d3b2d44cd2a14b1d3a8a0be785d43fa0934342ef45bd1fa4dcd"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._native_table_payload (cognitive 19): tbl_to_svg._native_table_payload has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, boolean chains 3, loops 3, ternaries 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1150}}}],"partialFingerprints":{"codehealthFindingId/v1":"64997a878d24ef4154afc397a176d12817627f167fcbaf078a343fa97a8c098a"}},{"ruleId":"D2","level":"warning","message":{"text":"project_specs.parse_spec_lock_artifact (cognitive 19): project_specs.parse_spec_lock_artifact has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8, ternaries 6, loops 3, boolean chains 2 (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":"skills/ppt-master/scripts/project_management/project_specs.py"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"48e70607b229c5bc77f9e9c834bf28a18d128d35978c3ecb7339978ebc4a5f4e"}},{"ruleId":"D2","level":"warning","message":{"text":"web_to_md.element_to_markdown (cognitive 19): web_to_md.element_to_markdown has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, ternaries 4, boolean chains 2, loops 1 (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":"skills/ppt-master/scripts/source_to_md/web_to_md.py"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d43af127aee690d06e3924196d6a0aa518c58e6af9da88fc80be5bae3124a5f"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_authoring_view._publish_existing_directory (cognitive 19): svg_authoring_view._publish_existing_directory has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 4, boolean chains 2, error handling 1 (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":"skills/ppt-master/scripts/svg_authoring_view.py"},"region":{"startLine":770}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aa0f258997282ba95e904b821c750528d8d69b16ec6dce1158d289d75d57a4d"}},{"ruleId":"D2","level":"warning","message":{"text":"flatten_tspan.nested_positional_tspan_errors (cognitive 19): flatten_tspan.nested_positional_tspan_errors has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 6, ternaries 2 (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":"skills/ppt-master/scripts/svg_finalize/flatten_tspan.py"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"b25dab647be40294c9a368716ceb9ba1c12964377d31ae660a1f5871b18e8023"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._check_text_output_geometry (cognitive 19): SVGQualityChecker._check_text_output_geometry has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, error handling 5, loops 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":1743}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5b817013398aeb016684c3c6c943c7a9d723c4beb9ec267daf6aeaab3f073d2"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._configure_prototype_context (cognitive 19): SVGQualityChecker._configure_prototype_context has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, error handling 2, loops 2, 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":4628}}}],"partialFingerprints":{"codehealthFindingId/v1":"943afb36d12295907f088a94fb99b2f5952a8521747582ed6b4744f70f6f31d8"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._extract_spec_roster (cognitive 19): SVGQualityChecker._extract_spec_roster has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, boolean chains 5, loops 3, 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6474}}}],"partialFingerprints":{"codehealthFindingId/v1":"906612c46a32237ab785a419301dba2fd7d7cf58bf5209226983e81294de4a21"}},{"ruleId":"D2","level":"warning","message":{"text":"converter._require_chart_table_marker_attributes (cognitive 19): converter._require_chart_table_marker_attributes has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, error handling 3, loops 3, boolean chains 2, ternaries 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"7169d28dd2950e46a14432543573f9daeaf3ebde46c9489d946e76dfc86621a5"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.iter_project_opacities (cognitive 19): utils.iter_project_opacities has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 1 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1526}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6ab7561705fe91d8ea73c3150bb14d4886795a240d167c85da89d122d118cc4"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.iter_project_paints (cognitive 19): utils.iter_project_paints has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 1 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1759}}}],"partialFingerprints":{"codehealthFindingId/v1":"21519353a6d197f5fc65ffa5e3d8655be00cb161d919a7aadeb102d28e834e71"}},{"ruleId":"D2","level":"warning","message":{"text":"native_objects._validate_native_object_marker_payload (cognitive 19): native_objects._validate_native_object_marker_payload has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, boolean chains 3, error handling 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/__init__.py"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"edab49fdfe10c9062d5e1481d9cd661168324df386d4f14105777eb33c449f17"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_style._chart_companion_text_xml (cognitive 19): chart_style._chart_companion_text_xml has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8, boolean chains 6, ternaries 4, 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py"},"region":{"startLine":800}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f8ce7486f2f6f96d727c1df3adc78620b764091fcb82f395e9cba26d6aa792"}},{"ruleId":"D2","level":"warning","message":{"text":"table._validate_table_cell_formatting (cognitive 19): table._validate_table_cell_formatting has cognitive complexity 19 (threshold 15). Drivers by points: loops 9, if/else 8, boolean chains 1, ternaries 1 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"86b1ec7625d5b31e3b29723a169c32bdb3cacd7782cc5da806fa79a4a27f0a2a"}},{"ruleId":"D2","level":"warning","message":{"text":"workbook._minimal_category_chart_workbook (cognitive 19): workbook._minimal_category_chart_workbook has cognitive complexity 19 (threshold 15). Drivers by points: loops 17, boolean chains 1, if/else 1 (nesting depth added 11). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/workbook.py"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6cb6adf838366409a040227aeee56363562ca56f1d6c5096ce34e169307c851"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._promote_common_slide_backgrounds_to_masters (cognitive 19): builder._promote_common_slide_backgrounds_to_masters has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 6, 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce3096b0a141ad59f80ae021a0cfdbd2da4fc17ca89189858b08a880dbec17f8"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._slide_animation_settings (cognitive 19): builder._slide_animation_settings has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 4 (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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":4047}}}],"partialFingerprints":{"codehealthFindingId/v1":"29433014e484d2e286b93f4d22018f6aa7ce5ec78817415dea4940b0514bb780"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure.template_placeholder_bindings (cognitive 19): template_structure.template_placeholder_bindings has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, ternaries 5, 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8baf6c904b8947f2f6d9fb2efe77efb52f1430a470a49027a5bdc3e01cf1af3"}},{"ruleId":"D2","level":"warning","message":{"text":"text_outline.text_element_to_path_commands (cognitive 19): text_outline.text_element_to_path_commands has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, loops 3, 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":"skills/ppt-master/scripts/svg_to_pptx/text_outline.py"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"87950101bd65df6830a78e04a940f76a6ab23782ba9ed944563a7eb527fc2b00"}},{"ruleId":"D2","level":"warning","message":{"text":"use_expander._symbol_viewport_transform (cognitive 19): use_expander._symbol_viewport_transform has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 3, ternaries 2, 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":"skills/ppt-master/scripts/svg_to_pptx/use_expander.py"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cbc768a6f313753eb8032231aa73355f626cfd30ce920835792e772562a31ed"}},{"ruleId":"D2","level":"warning","message":{"text":"checker._table_merge_slave_lookup (cognitive 19): checker._table_merge_slave_lookup has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6, ternaries 6, error handling 3, loops 3, boolean chains 1 (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":"skills/ppt-master/scripts/template_fill_pptx/checker.py"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"d26a36fb26fcecab5d307d0e919d74aac9dc72e4eb26edd310a6be33af25b649"}},{"ruleId":"D2","level":"warning","message":{"text":"text_fill._set_container_text (cognitive 19): text_fill._set_container_text has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, loops 5, ternaries 3, 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":"skills/ppt-master/scripts/template_fill_pptx/text_fill.py"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"415cbb9572b73017073dbdee4a4ffa53b3299f2c9196694d1cc8ca42d035d35f"}},{"ruleId":"D2","level":"warning","message":{"text":"validator.validate_project (cognitive 19): validator.validate_project has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, boolean chains 5, error handling 2, loops 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":"skills/ppt-master/scripts/template_fill_pptx/validator.py"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba0dec8147ea7ecec1263a0f949d0bed5ecf09c0efc66c20f92ea7251d666e20"}},{"ruleId":"D2","level":"warning","message":{"text":"update_spec._publish_text_updates (cognitive 19): update_spec._publish_text_updates has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, loops 5, error handling 4, boolean chains 1 (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":"skills/ppt-master/scripts/update_spec.py"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed9a15794f811508206ccbf3ff20980cafef7ff43c1f5b8bba8f9910b205e158"}},{"ruleId":"D2","level":"warning","message":{"text":"extract_svg_assets._load_reusable_assets (cognitive 18): extract_svg_assets._load_reusable_assets has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 2, 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":"skills/ppt-master/scripts/extract_svg_assets.py"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"1449e4e8247bb5f463641464de5494b7475cad928eec8a648a4aa1075df87a81"}},{"ruleId":"D2","level":"warning","message":{"text":"native_enhance_pptx_core._resolve_slide_enter (cognitive 18): native_enhance_pptx_core._resolve_slide_enter has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18 (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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1326}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4a7fc96464e831bb79cea888f20dc9fff7c3b99dc305714b68edbe0bb245a80"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations.read_slide_animation_sequence (cognitive 18): pptx_animations.read_slide_animation_sequence has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8, loops 4, ternaries 3, boolean chains 2, 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":3246}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbb2799ea2e0a1b4264139f16343450f31ed0fb1870654874b23ddedab87b6cf"}},{"ruleId":"D2","level":"warning","message":{"text":"semantic_hash._native_fallback_subtree (cognitive 18): semantic_hash._native_fallback_subtree has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, boolean chains 6, loops 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":"skills/ppt-master/scripts/pptx_shapes/semantic_hash.py"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"902702cb8a1dee627ee5bf2f2fa6ea9250ac58effff3139fcdc3bebb906d95ed"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg.extract_native_chart_payload (cognitive 18): chart_to_svg.extract_native_chart_payload has cognitive complexity 18 (threshold 15). Drivers by points: error handling 8, if/else 8, boolean chains 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"16597964c8cc0f6f70e4e61d6b0a2eb360a2abbfbaefff538804c6050e0cf703"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._data_labels_payload (cognitive 18): chart_to_svg._data_labels_payload has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 2, loops 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":2062}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b71952160b5ea3fe33021d3d1347580b412454f391fccd58ff1e3a53c5d325"}},{"ruleId":"D2","level":"warning","message":{"text":"color_resolver._compatible_color_element (cognitive 18): color_resolver._compatible_color_element has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 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":"skills/ppt-master/scripts/pptx_to_svg/color_resolver.py"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5fc1deb4b7c0d88176f76557d008a2b4ab15802c8d9424c816d872abb38046c"}},{"ruleId":"D2","level":"warning","message":{"text":"effect_to_svg._validate_color (cognitive 18): effect_to_svg._validate_color has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, boolean chains 5, loops 2, 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":"skills/ppt-master/scripts/pptx_to_svg/effect_to_svg.py"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"40a74ecdb8c958e7845a9989fb24093f4516f2adc9a93e55c85fd1bfdd43e23c"}},{"ruleId":"D2","level":"warning","message":{"text":"shape_walker._build_placeholder_body_property_table (cognitive 18): shape_walker._build_placeholder_body_property_table has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, loops 6, boolean chains 2 (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":"skills/ppt-master/scripts/pptx_to_svg/shape_walker.py"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c09d2208ac7d9661172e2d692b7a366196c2408510a86e1b40438db16fb1f69"}},{"ruleId":"D2","level":"warning","message":{"text":"slide_to_svg.assemble_part_solo (cognitive 18): slide_to_svg.assemble_part_solo has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, ternaries 3, boolean chains 2, error handling 1, 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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccdaee11e7d78ac886e13fc038f3f07e27e57413804430e568fd19cc1adb0efe"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_transitions.normalize_transition_effect_options (cognitive 18): pptx_transitions.normalize_transition_effect_options has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 2, loops 1 (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":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":1007}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebc417692b7c9c492ba3e2936e61374f8844f339188e88d4af86d5f967fc0ff4"}},{"ruleId":"D2","level":"warning","message":{"text":"prompt_audit.extract_paragraphs (cognitive 18): prompt_audit.extract_paragraphs has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, loops 3, boolean chains 1 (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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"1911db6dbdc424337894f96ce6e6cf336618079bf2ea613a3e80d033da47eb4c"}},{"ruleId":"D2","level":"warning","message":{"text":"register_template._extract_entry (cognitive 18): register_template._extract_entry has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8, boolean chains 6, ternaries 4 (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":"skills/ppt-master/scripts/register_template.py"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a3cad2f0b1876dc59a42988bf308554e3a9d8ca907cacb8d781fc412c2657c9"}},{"ruleId":"D2","level":"warning","message":{"text":"register_template.main (cognitive 18): register_template.main has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, loops 3, boolean chains 2, error handling 2, ternaries 1 (nesting depth added 4). 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":"skills/ppt-master/scripts/register_template.py"},"region":{"startLine":708}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d8edf81e0b64960cfd82ea87ff40129233b95313d6dc91f6d1d2464991dd99e"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md._write_generic_image_manifest (cognitive 18): doc_to_md._write_generic_image_manifest has cognitive complexity 18 (threshold 15). Drivers by points: ternaries 10, if/else 5, loops 2, boolean chains 1 (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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9b90729a2225f87d293c1fda3b9ebabb770a36fb3b66a6b708952b1d9af1b8c"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md._convert_docx (cognitive 18): doc_to_md._convert_docx has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, error handling 5, loops 3, boolean chains 1 (nesting depth added 3). 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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"73dc747bc553a45d307c1b966726d715c02faaef5b87a006be1f5b35b277d2a7"}},{"ruleId":"D2","level":"warning","message":{"text":"embed_images.embed_images_in_svg (cognitive 18): embed_images.embed_images_in_svg has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, ternaries 4, loops 2, 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":"skills/ppt-master/scripts/svg_finalize/embed_images.py"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"80e7a4453d01c944ae88026617564717fc6944d3b72830110582cece5f6a3855"}},{"ruleId":"D2","level":"warning","message":{"text":"fix_image_aspect.main (cognitive 18): fix_image_aspect.main has cognitive complexity 18 (threshold 15). Drivers by points: if/else 17, 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":"skills/ppt-master/scripts/svg_finalize/fix_image_aspect.py"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc1c943511bdadc148e0b220d54e3700b3f14ee8ab7643abf9e08dff4a148de3"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGPositionValidator.extract_all_positions (cognitive 18): SVGPositionValidator.extract_all_positions has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8, boolean chains 4, error handling 4, loops 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":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"44805028a0742591728b409f711ae2e0896dd2f02df88a986913494fa137a711"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._prototype_drift_allowances (cognitive 18): SVGQualityChecker._prototype_drift_allowances has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, loops 3, boolean chains 2, error handling 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3965}}}],"partialFingerprints":{"codehealthFindingId/v1":"a60c102df5d6fc459607edbff007f7c6180829057236d01aa8cd4116f60e1fee"}},{"ruleId":"D2","level":"warning","message":{"text":"animation_config._animation_group_errors (cognitive 18): animation_config._animation_group_errors has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, loops 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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":901}}}],"partialFingerprints":{"codehealthFindingId/v1":"338865847e3417da7253c4c99d4dcad2cbc55eb88ec60800c39a4254b31a00e5"}},{"ruleId":"D2","level":"warning","message":{"text":"elements._fit_full_image_target (cognitive 18): elements._fit_full_image_target has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 6 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3899}}}],"partialFingerprints":{"codehealthFindingId/v1":"946136d259b54f724bd8ba99863b4e8db9a0ad2b09d6207c2d911a23146abf55"}},{"ruleId":"D2","level":"warning","message":{"text":"elements.project_nested_svg_crop_errors (cognitive 18): elements.project_nested_svg_crop_errors has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7, boolean chains 4, loops 3, error handling 2, ternaries 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":4783}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ff667a96c3775d2d61c25df6d8fea59bbb384e792e5e41709e74209612a16f0"}},{"ruleId":"D2","level":"warning","message":{"text":"paths._expand_arc_argument_tokens (cognitive 18): paths._expand_arc_argument_tokens has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, boolean chains 4, 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"1796f8c89e1f9d41b32053a96193ed650ad80d43469875f6314427e3018387d2"}},{"ruleId":"D2","level":"warning","message":{"text":"styles.build_gradient_fill (cognitive 18): styles.build_gradient_fill has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/styles.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee92e8eccc6192bbd605892946b5960570b76b07c23ffd0ac0480c51e52b1e80"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.parse_font_family (cognitive 18): utils.parse_font_family has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, boolean chains 5, ternaries 2, 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":3032}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9ac0dc4746600fbd64f0063fcf7b7e1985990960732d2acb54d641c4458935e"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_data._category_chart_data (cognitive 18): chart_data._category_chart_data has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, boolean chains 4, ternaries 4 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":652}}}],"partialFingerprints":{"codehealthFindingId/v1":"242c38f8d534d6d18607e8bbdc63798181d911d2cd8b55032d99b35b73c467e9"}},{"ruleId":"D2","level":"warning","message":{"text":"workbook._minimal_workbook (cognitive 18): workbook._minimal_workbook has cognitive complexity 18 (threshold 15). Drivers by points: loops 12, if/else 6 (nesting depth added 9). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/workbook.py"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"943832f690324c1c64473844db015910455980bfd0e9506b07a61c554434a603"}},{"ruleId":"D2","level":"warning","message":{"text":"workbook._minimal_xy_chart_workbook (cognitive 18): workbook._minimal_xy_chart_workbook has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, loops 4 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/workbook.py"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"c30b2762e9b3c9fde0da790b04eea40cd8d33d692cb2e98f4a1e295691aa3fb2"}},{"ruleId":"D2","level":"warning","message":{"text":"workbook._minimal_chart_ex_workbook (cognitive 18): workbook._minimal_chart_ex_workbook has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, loops 9 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/workbook.py"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"8104bfa87fb5bdbfda33d867b35a30891b4d764b5498aefc0aa61e70087a0957"}},{"ruleId":"D2","level":"warning","message":{"text":"discovery.find_notes_files (cognitive 18): discovery.find_notes_files has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, loops 3, error handling 2, ternaries 2, boolean chains 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/discovery.py"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"e77b66cfadb801b0124e2121f51f985f1de1df3ec8b82ab6f8f25a4b591f3f35"}},{"ruleId":"D2","level":"warning","message":{"text":"narration.find_narration_files (cognitive 18): narration.find_narration_files has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/narration.py"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"9454cb24e8cd54a0e6d7fb4cb9b25e8e759beef424a8ee17e958b71f1417c050"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure.native_structure_lock_errors (cognitive 18): template_structure.native_structure_lock_errors has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, error handling 2, loops 2, boolean chains 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":3310}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3e030e6602139cb7d96a2dac4eb59a3320966c45b61250557ccbc750cdac33f"}},{"ruleId":"D2","level":"warning","message":{"text":"text_outline._font_catalog (cognitive 18): text_outline._font_catalog has cognitive complexity 18 (threshold 15). Drivers by points: error handling 5, if/else 4, boolean chains 3, loops 3, ternaries 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":"skills/ppt-master/scripts/svg_to_pptx/text_outline.py"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e9337987287a15800e704dafbb648ac9ae0f804961f5921e1c460af4a11669d"}},{"ruleId":"D2","level":"warning","message":{"text":"diagram_read._ordered_nodes (cognitive 18): diagram_read._ordered_nodes has cognitive complexity 18 (threshold 15). Drivers by points: loops 8, if/else 7, boolean chains 3 (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":"skills/ppt-master/scripts/template_fill_pptx/diagram_read.py"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"f96d6511acc6ec410f2c643eb6bd265317b94b9a347dcb7267dc5d8edf66d6d3"}},{"ruleId":"D2","level":"warning","message":{"text":"edit_safety._chart_edit_capability (cognitive 18): edit_safety._chart_edit_capability has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 2, loops 1 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/template_fill_pptx/edit_safety.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2e1d50c87007c9bdded0d09d66f97302f37f9c225c302d0ae9bd61de1b38c06"}},{"ruleId":"D2","level":"warning","message":{"text":"scaffolder.scaffold_plan (cognitive 18): scaffolder.scaffold_plan has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7, loops 7, boolean chains 4 (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":"skills/ppt-master/scripts/template_fill_pptx/scaffolder.py"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b0a8859f5b8be9295f47990e0c15fbf97d9f83751a4aa6462280793659eda7c"}},{"ruleId":"D2","level":"warning","message":{"text":"native_structure.build_native_structure (cognitive 18): native_structure.build_native_structure has cognitive complexity 18 (threshold 15). Drivers by points: boolean chains 8, if/else 6, loops 3, ternaries 1 (nesting depth added 1). 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":"skills/ppt-master/scripts/template_import/native_structure.py"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"03fceba9379fbcc82d834a2a1803047c92eacb1cdc07cb1adb30c9917f2eb539"}},{"ruleId":"D2","level":"warning","message":{"text":"generate_examples_index.generate_examples_index (cognitive 17): generate_examples_index.generate_examples_index has cognitive complexity 17 (threshold 15). Drivers by points: loops 12, if/else 5 (nesting depth added 5). 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":"skills/ppt-master/scripts/generate_examples_index.py"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"de08868051fbf25f80f18bf7dca86591500e019a6a33c88637f86fac4fe90e49"}},{"ruleId":"D2","level":"warning","message":{"text":"image_search.fetch_url_replace (cognitive 17): image_search.fetch_url_replace has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 8, error handling 5, if/else 4. 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":1198}}}],"partialFingerprints":{"codehealthFindingId/v1":"4938d0ba9978dd73eb845cac8d06924c569dfcf1f2c807b4afa1d74d11481640"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._resolved_placeholder_decorations (cognitive 17): mirror_template_materialize._resolved_placeholder_decorations has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, boolean chains 6, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1837}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a9065c904a53cd55abb8af2c5be2ea5cba0942cd7d9502893a6b04277d2f6e9"}},{"ruleId":"D2","level":"warning","message":{"text":"narration_sync._merge_subtitles_result (cognitive 17): narration_sync._merge_subtitles_result has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, ternaries 4, loops 3, boolean chains 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":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":1555}}}],"partialFingerprints":{"codehealthFindingId/v1":"626c5c7a8f3b53aa6acc81e191c138a88d495094c84a3cce3ec31157d8b52102"}},{"ruleId":"D2","level":"warning","message":{"text":"native_enhance_pptx_core.validate_project (cognitive 17): native_enhance_pptx_core.validate_project has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7, ternaries 6, boolean chains 2, error handling 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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":2179}}}],"partialFingerprints":{"codehealthFindingId/v1":"02bb2734bee138c7a2feebf9e1e8f1630613e76b02cb1c673ff7f0274bfbd9a9"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._row_timing_profile (cognitive 17): pptx_animations._row_timing_profile has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7, boolean chains 5, loops 3, 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1266}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f167c6d859ca3516d49416156de407ee9f8c4dc9f7bf68687db0af7f7d061c"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_animations._row_matches_powerpoint_behavior (cognitive 17): pptx_animations._row_matches_powerpoint_behavior has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7, ternaries 5, boolean chains 4, 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":2785}}}],"partialFingerprints":{"codehealthFindingId/v1":"e93cc396d7ecd73feafd6093d2f5a27e0d9a6b225e7f8e8a24f4eb57ba304d6c"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_intake._diagram_summary (cognitive 17): pptx_intake._diagram_summary has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, boolean chains 5, loops 3 (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":"skills/ppt-master/scripts/pptx_intake.py"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"a79e38c5c5b279117f067a84c7ba22d220a3e60e6d36d451fd2fc68540b07830"}},{"ruleId":"D2","level":"warning","message":{"text":"effect_to_svg.convert_effects (cognitive 17): effect_to_svg.convert_effects has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, error handling 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":"skills/ppt-master/scripts/pptx_to_svg/effect_to_svg.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce8c09bbfca0e08a43edc675c3f8c4456b9c96aa0d53aeae30a113acd8716014"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._native_run_payload (cognitive 17): tbl_to_svg._native_run_payload has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 2, error handling 2, loops 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1320}}}],"partialFingerprints":{"codehealthFindingId/v1":"b62334a2d942ef8fcfbe84141a16e2b20ee08c6641a7e2a13a637e4252b52d7a"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_transitions._apply_slide_motion_unchecked (cognitive 17): pptx_transitions._apply_slide_motion_unchecked has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 3, boolean chains 1, ternaries 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":1702}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e63bc0875acdcda402be58e2175db45741d23c38c3935ca01f3c707174a1a5c"}},{"ruleId":"D2","level":"warning","message":{"text":"page_context._page_image_filenames (cognitive 17): page_context._page_image_filenames has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, boolean chains 3, 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":"skills/ppt-master/scripts/project_management/page_context.py"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"5caf9d81d07f8b050a946c9bb12cb9590937182d6fc4136d7d770f163cd47173"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md.detect_headers_footers (cognitive 17): pdf_to_md.detect_headers_footers has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, loops 6 (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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4cedca1997d43ce60de0af6851d43b077101fe74ccd1a4eae3509a9dc7f1192"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md._flatten_regression_header (cognitive 17): pdf_to_md._flatten_regression_header has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 5, 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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":820}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdf8c3b3f7227d51525a33744da01641a6039105e5c24665e8f6a96bb79d93b8"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md._fix_variable_definition_table (cognitive 17): pdf_to_md._fix_variable_definition_table has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, ternaries 6, boolean chains 2, loops 1 (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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":890}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd0d1946d8db2c6d19c671181b2c32c7fd1a11e73182128fe32f1491143e0842"}},{"ruleId":"D2","level":"warning","message":{"text":"server._apply_edit_record (cognitive 17): server._apply_edit_record has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 3 (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":"skills/ppt-master/scripts/svg_editor/server.py"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"dac707bf23f287eb575efabd19f6e6a0c572bf580f5b73376885e9a17e90d100"}},{"ruleId":"D2","level":"warning","message":{"text":"embed_icons._casefold_icon_name_in_dir (cognitive 17): embed_icons._casefold_icon_name_in_dir has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 1 (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":"skills/ppt-master/scripts/svg_finalize/embed_icons.py"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5f032ea23bed85ee5da77e41543d2892c93802954d421cdffb3535d1a2b217b"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker.export_json_report (cognitive 17): SVGQualityChecker.export_json_report has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7, loops 6, boolean chains 4 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6930}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ba76046c690e8fe859b9a1df6bacbe03947cc008e65010f13d020fa92ffd50"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_contracts.check_freeform_geometry_values (cognitive 17): svg_contracts.check_freeform_geometry_values has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, loops 4, boolean chains 2, error handling 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":930}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bfff3c07aef6d900cfc4d712caec6c6c2b899b7ab0148b37ac6eabceb5d0c38"}},{"ruleId":"D2","level":"warning","message":{"text":"styles.build_stroke_xml (cognitive 17): styles.build_stroke_xml has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 3 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/styles.py"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"58eb3762fc24593572737437ac5bfa5aa45988241fbc65427c46ea75fc1e1a60"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.is_picture_effect_carrier (cognitive 17): utils.is_picture_effect_carrier has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 6 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2904}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f0207bfc2f3c1de648620700450bc68b313d6833143453cfc241b1ed575e75b"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_xml._combo_plot_xml (cognitive 17): chart_xml._combo_plot_xml has cognitive complexity 17 (threshold 15). Drivers by points: ternaries 10, if/else 4, boolean chains 2, loops 1 (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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc4f6d629be82e9c262cd22bdfe0778427b111cb2954979887a3308dde87b257"}},{"ruleId":"D2","level":"warning","message":{"text":"marker_common._hex_or_none (cognitive 17): marker_common._hex_or_none has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 2, error handling 2, 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"340c6ae9ff38d49c40c73c8cb8de89cd87476f10dba6f39926bd8ef7e8deccce"}},{"ruleId":"D2","level":"warning","message":{"text":"narration._animation_timing_branches (cognitive 17): narration._animation_timing_branches has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 2, 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/narration.py"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"d45204d9c165d5ecd0e7d542f0f9619d79f55a0bb98b8cf4be497347e9df4a75"}},{"ruleId":"D2","level":"warning","message":{"text":"notes.create_notes_slide_xml (cognitive 17): notes.create_notes_slide_xml has cognitive complexity 17 (threshold 15). Drivers by points: ternaries 11, if/else 3, 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/notes.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fd03ee38f3fc7231f7e2ae2344b88867b01a429c33ade654720016b3f821a84"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure._is_full_canvas_solid_rect (cognitive 17): template_structure._is_full_canvas_solid_rect has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, boolean chains 4, error handling 3 (nesting depth added 2). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"693dae26b37e40a291cf9fc01e1c53c832deda1c5e020f4e1c19ca7ff8783a96"}},{"ruleId":"D2","level":"warning","message":{"text":"shape_boolean._require_closed_commands (cognitive 17): shape_boolean._require_closed_commands has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, 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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":914}}}],"partialFingerprints":{"codehealthFindingId/v1":"97b2aaa606b2fa92cef1e6e9e4df3e0507bcfb1083f8af9f9c4cac6f568131fd"}},{"ruleId":"D2","level":"warning","message":{"text":"shape_boolean._fragment_paths (cognitive 17): shape_boolean._fragment_paths has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, ternaries 4, loops 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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"01291c72a1679a6eaa7150e855026dc60eb9c0252acbbae826bcd79e62b199af"}},{"ruleId":"D2","level":"warning","message":{"text":"shape_boolean._effective_style (cognitive 17): shape_boolean._effective_style has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 3, boolean chains 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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":1218}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1fae448250c1081ea305c2c40b9af1fec927be2cf9b4b70dc112da50638da5a"}},{"ruleId":"D2","level":"warning","message":{"text":"cli.main (cognitive 17): cli.main has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, ternaries 4, boolean chains 1, error handling 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":"skills/ppt-master/scripts/template_fill_pptx/cli.py"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"c700aba94ff7ecd83e3c8b48dcf460d120450936ea5d31a903177f1e29bad520"}},{"ruleId":"D2","level":"warning","message":{"text":"clone._clone_part_private_deps (cognitive 17): clone._clone_part_private_deps has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, 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":"skills/ppt-master/scripts/template_fill_pptx/clone.py"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f407fba51227f3751e8a9d4a873fe15dc9798f8944859f8713de90cd870ac73"}},{"ruleId":"D2","level":"warning","message":{"text":"diagram_read._diagram_parts (cognitive 17): diagram_read._diagram_parts has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, 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":"skills/ppt-master/scripts/template_fill_pptx/diagram_read.py"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"a266717eb1346f810534765fc24ca3d48c645234b1ee20caef98e60bc95db836"}},{"ruleId":"D2","level":"warning","message":{"text":"transitions._resolve_slide_transition (cognitive 17): transitions._resolve_slide_transition has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, error handling 3, boolean chains 2, 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":"skills/ppt-master/scripts/template_fill_pptx/transitions.py"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"94dd38561a09752ed77be09fae2e9beba9c2898f2aefc37a5768647c5c580e6c"}},{"ruleId":"D2","level":"warning","message":{"text":"validator._table_tokens (cognitive 17): validator._table_tokens has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7, loops 6, boolean chains 3, ternaries 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":"skills/ppt-master/scripts/template_fill_pptx/validator.py"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"29ebf4c30701758695e07b9fe3c10dc7f8106c8f40f01df2a66c1d20782bcb9e"}},{"ruleId":"D2","level":"warning","message":{"text":"template_preview_pptx._verify_output (cognitive 17): template_preview_pptx._verify_output has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 5 (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":"skills/ppt-master/scripts/template_preview_pptx.py"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a7f8b68b06bf5b9c4dc9ea049cc12df08968cefb588b8c981b8254ebcaf6901"}},{"ruleId":"D2","level":"warning","message":{"text":"backend_edge._subtitle_cues (cognitive 17): backend_edge._subtitle_cues has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, ternaries 4, boolean chains 2, loops 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":"skills/ppt-master/scripts/tts_backends/backend_edge.py"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d6d1ccbe7c3e30064014d07fa211c37f4c32c026029218303b3495cad5ba37"}},{"ruleId":"D2","level":"warning","message":{"text":"analyze_images._analyze_images (cognitive 16): analyze_images._analyze_images has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, error handling 3, boolean chains 1, 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":"skills/ppt-master/scripts/analyze_images.py"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"e42dd83836e51ce3fdd1444c5af705c2b82a7f91e413b17ed7ff79a411055d07"}},{"ruleId":"D2","level":"warning","message":{"text":"BatchValidator.validate_project (cognitive 16): BatchValidator.validate_project has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 4, boolean chains 2 (nesting depth added 3). 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":"skills/ppt-master/scripts/batch_validate.py"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ec102917b42dd03dbad21fffd2efd5846f677a2fd78b5e068cca37fedad3d8a"}},{"ruleId":"D2","level":"warning","message":{"text":"BatchValidator.export_report (cognitive 16): BatchValidator.export_report has cognitive complexity 16 (threshold 15). Drivers by points: loops 7, if/else 4, ternaries 4, 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":"skills/ppt-master/scripts/batch_validate.py"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"c18ee77445b614e5f513580f35cf9d3f817c28f5cb94b661fba42ccd06adb7ac"}},{"ruleId":"D2","level":"warning","message":{"text":"config.load_prefixed_env_file (cognitive 16): config.load_prefixed_env_file has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 2, loops 1 (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":"skills/ppt-master/scripts/config.py"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"522e8efc07fd5708370cfff3608a838a7e35788804abda52097ef94d03074e1d"}},{"ruleId":"D2","level":"warning","message":{"text":"image_search._search_one_item (cognitive 16): image_search._search_one_item has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 6, error handling 4, if/else 4, ternaries 2 (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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":1439}}}],"partialFingerprints":{"codehealthFindingId/v1":"67760687a13426de62de76a3a649213ac575b385b7aa36cf830c285a868a9b46"}},{"ruleId":"D2","level":"warning","message":{"text":"provider_openverse.parse_results (cognitive 16): provider_openverse.parse_results has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 11, if/else 4, loops 1 (nesting depth added 2). 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":"skills/ppt-master/scripts/image_sources/provider_openverse.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"c44e43aa96399ede08f188cb6d0c12f8f0b985dc2550d420ae69925e05d1f243"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._text_body_segments (cognitive 16): mirror_template_materialize._text_body_segments has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 3, boolean chains 2, error handling 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"76ebe3e23bf3db639987a9b6094e0c7ba58faaaac2bd58c4b6480cb316b6a826"}},{"ruleId":"D2","level":"warning","message":{"text":"mirror_template_materialize._sanitize_connector_references (cognitive 16): mirror_template_materialize._sanitize_connector_references has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, loops 6, boolean chains 3 (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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":2348}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5a88b1a1ad4ff6ec44bf0b3b00f4ccf4f6d2e9626b42bfe0e82b9abe6f19db5"}},{"ruleId":"D2","level":"warning","message":{"text":"narration_sync._parse_srt (cognitive 16): narration_sync._parse_srt has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, error handling 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":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc179356b80203aa11ba54a1af1a6406a99117f591b6aa51d75c2512684bc804"}},{"ruleId":"D2","level":"warning","message":{"text":"native_enhance_pptx_core._output_path_error (cognitive 16): native_enhance_pptx_core._output_path_error has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, error handling 3, boolean chains 2, loops 1 (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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":992}}}],"partialFingerprints":{"codehealthFindingId/v1":"be395621302cc4c6da7d26c860b5c72a9721ddbdd9f476b8ecaee628986558f4"}},{"ruleId":"D2","level":"warning","message":{"text":"native_enhance_pptx_core._resolved_draft_transition_config (cognitive 16): native_enhance_pptx_core._resolved_draft_transition_config has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, ternaries 3 (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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1137}}}],"partialFingerprints":{"codehealthFindingId/v1":"80eeee2f8e22301993209eee17a067eb115f33b12cbb45902768c5494b25a93b"}},{"ruleId":"D2","level":"warning","message":{"text":"pptx_effects.txbody_has_run_effects (cognitive 16): pptx_effects.txbody_has_run_effects has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, loops 6, 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":"skills/ppt-master/scripts/pptx_effects.py"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"b71c7e53b6da5a9e37912779f150d5cdfbbf15cc5d9a2743013126e43b245ff9"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_to_svg._validate_normalized_axis_topology (cognitive 16): chart_to_svg._validate_normalized_axis_topology has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 5, loops 1 (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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1372}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1547cc17b231a46aa4fd4b3c7e934c6dc2b6217773c4879defe6feb75aa91a2"}},{"ruleId":"D2","level":"warning","message":{"text":"OoxmlPackage._load_presentation (cognitive 16): OoxmlPackage._load_presentation has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 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":"skills/ppt-master/scripts/pptx_to_svg/ooxml_loader.py"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"588d6428a595f678cf63dccb02d50144189495ad18e7051624b871b602fc4cab"}},{"ruleId":"D2","level":"warning","message":{"text":"slide_to_svg.assemble_slide (cognitive 16): slide_to_svg.assemble_slide has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6, ternaries 6, boolean chains 2, error handling 1, loops 1 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e19972763c07e460ba5270bdf12092cc7a8af1375a26d2457e369bee032dd59"}},{"ruleId":"D2","level":"warning","message":{"text":"tbl_to_svg._native_cell_payload (cognitive 16): tbl_to_svg._native_cell_payload has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1205}}}],"partialFingerprints":{"codehealthFindingId/v1":"647c1824597ed20377548e163581186a50bd9cb7fa9c35229a9dfb04d6b5720e"}},{"ruleId":"D2","level":"warning","message":{"text":"txbody_to_svg.convert_txbody (cognitive 16): txbody_to_svg.convert_txbody has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 3, ternaries 3, loops 1 (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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"551096e11343e58c65778f2cb122c7de7422ef4c8f3bd984f9175d158948c429"}},{"ruleId":"D2","level":"warning","message":{"text":"txbody_to_svg._build_run (cognitive 16): txbody_to_svg._build_run has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, error handling 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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"310a4e036ddc4a16028ab17dad607b203766b0cc9845ce77ab716eb499d4a73c"}},{"ruleId":"D2","level":"warning","message":{"text":"txbody_to_svg._resolve_theme_typeface (cognitive 16): txbody_to_svg._resolve_theme_typeface has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 6, if/else 6, ternaries 4 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"364518f20046810568dcf527d7a4980033d84ab4e36405401fa86d9215492ad4"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectManager._merge_image_manifest (cognitive 16): ProjectManager._merge_image_manifest has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 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":"skills/ppt-master/scripts/project_management/cli.py"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"147a2e952503d3c75560acdae46782159731975fcbdd723cecd7fe3ad4265eb2"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectManager._propagate_image_assets (cognitive 16): ProjectManager._propagate_image_assets has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, error handling 2, loops 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":"skills/ppt-master/scripts/project_management/cli.py"},"region":{"startLine":614}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ff8519e6a59e346809c30c027484963577e6b9a449126f69b6b4a7205811d3b"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md._docx_inject_tables_markdown (cognitive 16): doc_to_md._docx_inject_tables_markdown has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, loops 3, error handling 2, 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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f214c0c28a158eed8df395812ed6893bee472d672254f41fa45d17f05f3aa49"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md._convert_with_pandoc (cognitive 16): doc_to_md._convert_with_pandoc has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 3, error handling 2, 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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":1323}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b81482afcc487e67c4ecf27e23918f7ad820cc665661bc93001ade6a77ba370"}},{"ruleId":"D2","level":"warning","message":{"text":"doc_to_md.convert_to_markdown (cognitive 16): doc_to_md.convert_to_markdown has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":1397}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f04caa5bf863dad8071185a67aacf63a5768dc1b5e140ab40c16530931af8a"}},{"ruleId":"D2","level":"warning","message":{"text":"excel_to_md._convert_excel (cognitive 16): excel_to_md._convert_excel has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 2, error handling 1, loops 1 (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":"skills/ppt-master/scripts/source_to_md/excel_to_md.py"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d42e6e8746a2031cc46ec97f51153e67f875c9ef1b43360cad9170be2ce187a"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_to_md.get_heading_level (cognitive 16): pdf_to_md.get_heading_level has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 6 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e353e4f23761e7213809a426106380d382517da7cf55399949dc35d1f2f2c70"}},{"ruleId":"D2","level":"warning","message":{"text":"svg_authoring_view._load_authoring_summary_manifest (cognitive 16): svg_authoring_view._load_authoring_summary_manifest has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 2, error handling 2, ternaries 2, 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":"skills/ppt-master/scripts/svg_authoring_view.py"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"619ddf424e20a86a8ebae4f675c98e7d2c71f29a9b2ca27fbf14d81ad16e7b18"}},{"ruleId":"D2","level":"warning","message":{"text":"fix_image_aspect.get_image_dimensions_basic (cognitive 16): fix_image_aspect.get_image_dimensions_basic has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 2, boolean chains 1, error handling 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":"skills/ppt-master/scripts/svg_finalize/fix_image_aspect.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4d980457c276d7c1d4c0fb9e7b555a51591ebf19a83e813f938885e81dedf15"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._has_zero_opacity (cognitive 16): SVGQualityChecker._has_zero_opacity has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, ternaries 5, error handling 3, 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2227}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3823e0aa752d3a91c031d989b0be6273833b670e3ca6d53b884e1fe4da08c1f"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._layout_contract_fingerprint (cognitive 16): SVGQualityChecker._layout_contract_fingerprint has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, boolean chains 4, loops 4, error handling 1 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":5242}}}],"partialFingerprints":{"codehealthFindingId/v1":"adcbd9ebb41910e9976f61a5e469ce8c2cd0bb41aa0da0c77153d288ef739b02"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._print_result (cognitive 16): SVGQualityChecker._print_result has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 4 (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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6587}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ded0a57236977d4f08f4818494e142a2f2ee4e493df9fa509f4c0a864221141"}},{"ruleId":"D2","level":"warning","message":{"text":"SVGQualityChecker._apply_aggregated_issue_counts (cognitive 16): SVGQualityChecker._apply_aggregated_issue_counts has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 5. 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6774}}}],"partialFingerprints":{"codehealthFindingId/v1":"975d4538818d46cf84c52554496cc4367378c404bac08daf6072eb0362145e08"}},{"ruleId":"D2","level":"warning","message":{"text":"converter._geometry_trace_metadata (cognitive 16): converter._geometry_trace_metadata has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 4, ternaries 2 (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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":1182}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd2d52c4ed62d615ec20624e28a57fc1547f83d1205e69b2dcee829a65401fc8"}},{"ruleId":"D2","level":"warning","message":{"text":"elements._override_run_attrs (cognitive 16): elements._override_run_attrs has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":2295}}}],"partialFingerprints":{"codehealthFindingId/v1":"1926144d2f70ca5c6d81411a5633178d191e723f5e03d9a49db8283a6cc3cbce"}},{"ruleId":"D2","level":"warning","message":{"text":"utils._transform_operations_matrix (cognitive 16): utils._transform_operations_matrix has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 12, if/else 3, 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":814}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1752fe6310b8690f05510b848db14923a4fbd0e91ef3bf45ebf8365d0a309cf"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.classify_project_marker_shape (cognitive 16): utils.classify_project_marker_shape has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1938}}}],"partialFingerprints":{"codehealthFindingId/v1":"adb2f10e8578529189c5d85ba5ac0b17f220c2cf3471cd8f34faa608d97dbe02"}},{"ruleId":"D2","level":"warning","message":{"text":"utils._is_imported_preset_preview_filter_target (cognitive 16): utils._is_imported_preset_preview_filter_target has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, boolean chains 7, error handling 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":2834}}}],"partialFingerprints":{"codehealthFindingId/v1":"925598ed49475e0cb22427c39ba0e9e460e23a3c38a9902e0356fa1a7f382593"}},{"ruleId":"D2","level":"warning","message":{"text":"chart_data._combo_plot_entry (cognitive 16): chart_data._combo_plot_entry has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6, boolean chains 5, ternaries 5. 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"6993b7bd765c04701d6044c64e6c022c31a4bd00a50b46865e47c24ffe84c7d3"}},{"ruleId":"D2","level":"warning","message":{"text":"marker_attributes.native_metadata_payload_matches (cognitive 16): marker_attributes.native_metadata_payload_matches has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, boolean chains 6, ternaries 2, loops 1 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_attributes.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"76bae839810721f5adc49548725660474f0a9364a05b467f7fc65bfc7ef0b110"}},{"ruleId":"D2","level":"warning","message":{"text":"marker_common._fallback_fill_candidates (cognitive 16): marker_common._fallback_fill_candidates has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 3, loops 2, 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"95ab3d39aaf346c2b6fd06e5222b0f2ad8b207bad34b909a401d84c2e7b080ee"}},{"ruleId":"D2","level":"warning","message":{"text":"builder._apply_template_slide_backgrounds (cognitive 16): builder._apply_template_slide_backgrounds has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, ternaries 3, boolean chains 1, 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":2041}}}],"partialFingerprints":{"codehealthFindingId/v1":"43be67b89ce3d037a3883701b12c8769c21e81831f755e9dc4da02542b6edd0f"}},{"ruleId":"D2","level":"warning","message":{"text":"dimensions.resolve_svg_canvas (cognitive 16): dimensions.resolve_svg_canvas has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 2, boolean chains 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/dimensions.py"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c1b631eedb4ba917ef1d381be12b94be146f767e50e05392bac33450202772f"}},{"ruleId":"D2","level":"warning","message":{"text":"template_structure._validate_placeholder_carrier (cognitive 16): template_structure._validate_placeholder_carrier has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 7, if/else 7, error handling 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1228}}}],"partialFingerprints":{"codehealthFindingId/v1":"835ca236a864e3826aed0d29b36d207683f9fd51314ecdfafd0d3a9c2e836557"}},{"ruleId":"D2","level":"warning","message":{"text":"text_outline._font_files (cognitive 16): text_outline._font_files has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, error handling 5, loops 3, 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":"skills/ppt-master/scripts/svg_to_pptx/text_outline.py"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f009b08ecc07fe75c6434528eae5a67be32ddc091ab086aeda4235a34b451f1"}},{"ruleId":"D2","level":"warning","message":{"text":"text_fill._apply_replacements_to_slide (cognitive 16): text_fill._apply_replacements_to_slide has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, 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":"skills/ppt-master/scripts/template_fill_pptx/text_fill.py"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f1df4181be2900f22efe20153288be612979d32d2ac52e767ec498c5e77c5df"}},{"ruleId":"D2","level":"warning","message":{"text":"video_subtitles._parse_srt (cognitive 16): video_subtitles._parse_srt has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, error handling 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":"skills/ppt-master/scripts/video_subtitles.py"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"28d1282ca2b3f5eaeab576e600ef41f03b2cc91e61b6450a9417e62718de1d65"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: svg_quality/checker.py: FileTooLong \u2014 5605 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb7c3b74db866903d3b9d65dc95c7fcef341d3409a46fd7a965c5af16c1f42a0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_package/builder.py: FileTooLong \u2014 4764 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b2834279132aa1e0879a5c87bda4e2582b38b521c5e24a69a845d1f526d317e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: drawingml/elements.py: FileTooLong \u2014 3838 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"87f8b59012e65465394ab17f57f5887473581037dff28a0fd05c404855e69669"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/pptx_animations.py: FileTooLong \u2014 3127 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cba2a4ee97d00aa38880281c2c9b95c6b2a66599a9f64e094284db6d195b6d9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: drawingml/utils.py: FileTooLong \u2014 2655 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31b3607aaae59e9806f415962451a90eb83c224e84d2e6d1eafa99a939b5ba7b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/mirror_template_materialize.py: FileTooLong \u2014 2409 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"46c3ff38bfa2e41788525606d85df82f34142517e7b6b564ab9e02190c35b8d4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/pptx_transitions.py: FileTooLong \u2014 2182 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_transitions.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9bd24074ef5c8ac4a0578db6501d52b9583e9b9a7726d6da3c798afce1a5906"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_to_svg/chart_to_svg.py: FileTooLong \u2014 2072 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a54dcacbab49df8d7f4de9d5117a7ffdcda73b9a16dadbd05cef0e8a1746d48"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SVGQualityChecker: TooManyMethods \u2014 120 methods. 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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":978}}}],"partialFingerprints":{"codehealthFindingId/v1":"18f86176f48b7f6c4fb698f76d6f2bb0c489834458cc896c3ba8e2c86e9be128"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/native_enhance_pptx_core.py: FileTooLong \u2014 1987 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"135cb13844f3beefbafc42fab739e0dd9fef92acdd74e52b0b9e39ecf760f9c5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: confirm_ui/server.py: FileTooLong \u2014 1612 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eab387c2dcb30432bb9316f3449396061f5a71a144a45d09fabb49aa633cad7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/image_search.py: FileTooLong \u2014 1607 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/image_search.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"096996b7794d2515dbf9555e2567694c89b220b68ea35723553d0ace95e1a380"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/narration_sync.py: FileTooLong \u2014 1519 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb785e49649f420be85bbf11520afc8a208766c811d0b082824252a89de66e92"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/prompt_audit.py: FileTooLong \u2014 1476 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"74f4670bf5ae4c70f2c55c8f55ccac8aff0793fe208dd9dbbcb2366b85a85854"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_to_svg/tbl_to_svg.py: FileTooLong \u2014 1469 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2657a82487df5ccfb3432e86b17ff72ab39c478bb7a0699becc83cfabf6cc29b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: drawingml/converter.py: FileTooLong \u2014 1376 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"40b41525fa7c5e084d38e7aa86a4fcde28897cfd411995085e33ebd7a3fc4d77"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: native_objects/chart_xml.py: FileTooLong \u2014 1270 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1e9ba56da58f02413442b24db7f641cfbbfbac6c9c1a0278e2cb368520fd163"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: source_to_md/pdf_to_md.py: FileTooLong \u2014 1262 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5d47a8c98af52f2b55cb4412d8a557a60dfb27845b9865e543c5846be594e8d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_package/template_validation.py: FileTooLong \u2014 1252 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_validation.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f256dc19239280042dda8bef384ac2fe8514ed9949c9d2136770ec3698f307c9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_to_svg/slide_to_svg.py: FileTooLong \u2014 1236 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7d45ec577d5bf1a4b0e2d82f48f746f1510499f2d3a78a863818d95fa0116fb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: svg_to_pptx/animation_config.py: FileTooLong \u2014 1196 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f67ab37784bfa52bf0a9d1ff5cca07cf624ae4fc6b168faa2348462d949386d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: source_to_md/doc_to_md.py: FileTooLong \u2014 1103 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6585e53df81b578ee17e571ecf6441d75e6159f5ada3302c2fc544c5e83184dc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: native_objects/chart_data.py: FileTooLong \u2014 1097 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92ece9b00518d85105cf5fe57b410e9a797008e06ed483be66d19a02da7880fd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: svg_to_pptx/shape_boolean.py: FileTooLong \u2014 1082 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f39da62d72ee4b9b066bd9f8c08be2104767b9d9866d1f2b34558dab5928420"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_to_svg/normalized_chart_svg.py: FileTooLong \u2014 1022 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00284f1739f965ef6d47db19952b09c8b8ea9b30b74900289b4ac26f08733c1c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/image_gen.py: FileTooLong \u2014 983 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df7db78dee01220fb20f3ef7018f4ffcb722d6347f90feefd6362dd56e30de50"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: project_management/cli.py: FileTooLong \u2014 982 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/project_management/cli.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dc6d8414759b1e8f497e9bf186ef0d7f1df2e9a267b8eacad79d42aaa625e09"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_to_svg/txbody_to_svg.py: FileTooLong \u2014 967 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffba4a1d717cd0ac8d5d4d0ce6db51171c99db8b895926b8dac8c22aec086a16"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: source_to_md/ppt_to_md.py: FileTooLong \u2014 933 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/source_to_md/ppt_to_md.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"50ee7ee91c2895ac1284a2ffba991d45759fcd1fd38ea6e5ff135bd4a319c5b4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: svg_to_pptx/text_outline.py: FileTooLong \u2014 923 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/text_outline.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e8de98b5d7f1d904910f9f775cc1f629e7addab751f02298172deb036f2ba46"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: native_objects/table.py: FileTooLong \u2014 910 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"02fad721c2f5e19fa54e95d0656c1f6d952dc1e920c11507cfce15e9212e50bc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: svg_quality/svg_contracts.py: FileTooLong \u2014 891 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"60b3ea2d35fffa0731b369b1399ba7092568d53f9f5eb98f6348c0af079727ac"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/pptx_delivery_check.py: FileTooLong \u2014 881 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_delivery_check.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9298cc1d972fa22b402bdee5e7f1a3f6d1de611de7d0d256804fea18e7f99a4c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/svg_position_calculator.py: FileTooLong \u2014 861 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4240b67dd7ca45b25a84f99646424dd7cb737345dbb310669fa008c9088ed8e2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/svg_authoring_view.py: FileTooLong \u2014 834 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_authoring_view.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb1f570aafd2320373301c35b03bf7221990fec6b5e76d7537357c4d3acfbb63"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_package/cli.py: FileTooLong \u2014 729 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c7b5df7685d2136e6dab24c326988163a714b71fd16a286a3a5258bcdb5fccb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: native_objects/chart_style.py: FileTooLong \u2014 722 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d79d45615e0f592267783544117778dc765d09205c06bbf6455e109688383ed8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: project_management/page_context.py: FileTooLong \u2014 721 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/project_management/page_context.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc332f3a7bf1f4846fde7640ebdd2a4e1b47458f9729c086c2cd52e4f3406e0f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_to_svg/color_resolver.py: FileTooLong \u2014 709 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_to_svg/color_resolver.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df19dc6fa6e62a3b0416c0ce3de3110f80a68f48ecf1f034ab662207f8eafd22"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_to_svg/converter.py: FileTooLong \u2014 681 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc20628e08574c773683da2bd21b25681beb731465b28e1001930d0a501d1505"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_to_svg/preset_authoring.py: FileTooLong \u2014 670 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f79ae820befaafc37f6d4d4e0b4bb2c50f763fc8af2eded54c2859ed10471494"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: template_import/manifest.py: FileTooLong \u2014 666 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/template_import/manifest.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5345dffa71810b3d3a1e3ad09c11e672dd0bdf4ae46778dc3c90f060f82d21b2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/extract_svg_assets.py: FileTooLong \u2014 657 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/extract_svg_assets.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae554c35524809f946d6c9bc298fa96e3ebef087fb76672248f01c762b31b643"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: drawingml/paths.py: FileTooLong \u2014 656 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5fd3b6c500cce7ca683b505b17f5d7b92db72d6d4d9c81f0d21553b2c2c9929"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: native_objects/marker_common.py: FileTooLong \u2014 647 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fab408de7796019395dad82ef1f17d72de08cdd028f26366c87969d2ab2df3af"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: svg_finalize/flatten_tspan.py: FileTooLong \u2014 609 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_finalize/flatten_tspan.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e24acb9ecaaa4956b0922f88fab7269430c872f1ae6aa7d5a5ac83eaa2fbdb3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: drawingml/text_properties.py: FileTooLong \u2014 603 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/text_properties.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dba99a220e8e049f3f6614a2ab3962ad4929dcefd596b4a284acba6a28c0f862"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pptx_to_svg/fill_to_svg.py: FileTooLong \u2014 570 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/pptx_to_svg/fill_to_svg.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd90b5ed61bc5e773400e5311d0459f9e2bda6b89b155e7a7f756d3cb2cdf2c7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: template_fill_pptx/checker.py: FileTooLong \u2014 566 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/template_fill_pptx/checker.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"48d413d9c10d7179591361b447b125ae15699c067bed02762177a6e2772dd6dd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/video_motion_plan.py: FileTooLong \u2014 558 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/video_motion_plan.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c10090bcd5782b1cfa880a805a09f279c21711e9e73c1b6e149c42692eae74b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/register_template.py: FileTooLong \u2014 557 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/register_template.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5688f119c6b7bfbe34f518d82cceef45f92a8bde601da84118663a54e35c72f0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProjectManager: TooManyMethods \u2014 31 methods. 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":"skills/ppt-master/scripts/project_management/cli.py"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"00299a080620c051c5bd5410b5a7cbd3c89e38af59f0a9c11459c3695aad50e3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scripts/notes_to_audio.py: FileTooLong \u2014 513 significant lines (blank, comment-only and punctuation-only lines excluded). 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":"skills/ppt-master/scripts/notes_to_audio.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2d7f8e542c425ef7b7bbbbe862db81a397184f3f1315ad4fcd0737ece5d4fb4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): skills/ppt-master/scripts/image_backends/backend_gemini.py:175-209 | skills/ppt-master/scripts/image_backends/backend_openrouter.py:166-188 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_backends/backend_gemini.py"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"23d57aa6bb86284b6b9d8af67d7a2df70c49d72205aaf409b0e1e0c816e77108"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): skills/ppt-master/scripts/image_sources/provider_pexels.py:110-129 | skills/ppt-master/scripts/image_sources/provider_pixabay.py:114-134 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_sources/provider_pexels.py"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"26363d08f21e97bff1cb38134149e5d9a86d7d889844d7d3896858b4c09e27ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): skills/ppt-master/scripts/native_enhance_pptx_core.py:2065-2083 | skills/ppt-master/scripts/template_fill_pptx/applier.py:232-250 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":2065}}}],"partialFingerprints":{"codehealthFindingId/v1":"21d01041bf3577ce517f68de0c91802580e6f0cb6d5f4ae0687d703e6f2f1663"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1486-1504 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:4480-4498 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1486\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1486}}}],"partialFingerprints":{"codehealthFindingId/v1":"a798c8abc16da9862e21cca892264e64e7846048d8d65f805a6597d21891e3b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): skills/ppt-master/scripts/finalize_svg.py:156-173 | skills/ppt-master/scripts/pptx_to_svg/converter.py:763-780 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/finalize_svg.py"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"793c95f48da4437af13aca435649087949cc224a904dcb0cf26aa16c7ebf3bcf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): skills/ppt-master/scripts/powerpoint_video.py:215-232 | skills/ppt-master/scripts/source_to_md/excel_to_md.py:375-392 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/powerpoint_video.py:215\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/powerpoint_video.py"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ec28e6db9a8b1f89112848157ee084e0b01e15f8661168b46c40a2d6f745b83"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 11): skills/ppt-master/scripts/image_backends/backend_bfl.py:167-183 | skills/ppt-master/scripts/image_backends/backend_fal.py:119-135 | skills/ppt-master/scripts/image_backends/backend_ideogram.py:144-160 | skills/ppt-master/scripts/image_backends/backend_minimax.py:198-214 | skills/ppt-master/scripts/image_backends/backend_modelscope.py:146-162 | skills/ppt-master/scripts/image_backends/backend_qwen.py:189-205 | skills/ppt-master/scripts/image_backends/backend_replicate.py:161-177 | skills/ppt-master/scripts/image_backends/backend_siliconflow.py:172-188 | skills/ppt-master/scripts/image_backends/backend_stability.py:135-151 | skills/ppt-master/scripts/image_backends/backend_volcengine.py:179-195 | skills/ppt-master/scripts/image_backends/backend_zhipu.py:178-194 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_backends/backend_bfl.py"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd3dd2bea0f1a1b2fa8e0478b195d17d08d49645c14bb2c20cf210e415d90f36"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1788-1804 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1856-1872 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1788\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1788}}}],"partialFingerprints":{"codehealthFindingId/v1":"32b853635039b40b3954095fbf873d4f85091712632248712e656a6b6fd0c5c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 4): skills/ppt-master/scripts/image_backends/backend_qwen.py:124-150 | skills/ppt-master/scripts/image_backends/backend_siliconflow.py:120-135 | skills/ppt-master/scripts/image_backends/backend_volcengine.py:124-141 | skills/ppt-master/scripts/image_backends/backend_zhipu.py:124-140 \u2014 before extracting anything, compare \u0060skills/ppt-master/scripts/image_backends/backend_qwen.py\u0060 and \u0060skills/ppt-master/scripts/image_backends/backend_siliconflow.py\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 92 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_backends/backend_qwen.py"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"30daac538716add17ea4362e75fe64ed21a17a756f1135781e24a9db5c55f612"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): skills/ppt-master/scripts/image_backends/backend_fal.py:70-85 | skills/ppt-master/scripts/image_backends/backend_replicate.py:90-109 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_backends/backend_fal.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"43a05bc8f86353dfdbf7e04f84fe6b6b6e87c226ed03443403c0504526d913b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): skills/ppt-master/scripts/image_backends/backend_openai.py:435-450 | skills/ppt-master/scripts/image_backends/backend_openai.py:531-546 \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":"skills/ppt-master/scripts/image_backends/backend_openai.py"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1bd7a6fddbd8113a0ae40ce06763598d96ece3ce04f30fdb97ea58c8f35b0ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): skills/ppt-master/scripts/pptx_animations.py:2946-2961 | skills/ppt-master/scripts/pptx_animations.py:2979-2994 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_animations.py:2946\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":2946}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea5b6a8695b4ddf5ad20bb6ce8112dae366d7daa1d2a8be4c0a7fa2ce6f6044c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:2396-2411 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:2433-2448 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:2396\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":2396}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b4fbcb7e35283c805d60bd4177a0aa62447629ff4e32171d9a0bd398c39afde"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py:512-527 | skills/ppt-master/scripts/svg_to_pptx/native_objects/chartex.py:22-37 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py:512\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"9342bc2a284fa3bfcd01dced76721b1e4522758bf0b18375539669492b3e4110"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 5): skills/ppt-master/scripts/image_backends/backend_minimax.py:139-157 | skills/ppt-master/scripts/image_backends/backend_qwen.py:126-151 | skills/ppt-master/scripts/image_backends/backend_siliconflow.py:122-136 | skills/ppt-master/scripts/image_backends/backend_volcengine.py:126-142 | skills/ppt-master/scripts/image_backends/backend_zhipu.py:126-141 \u2014 before extracting anything, compare \u0060skills/ppt-master/scripts/image_backends/backend_qwen.py\u0060 and \u0060skills/ppt-master/scripts/image_backends/backend_siliconflow.py\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 92 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_backends/backend_minimax.py"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"c340d074dbbd3ec7e58fa203d989a985040cb6aeafd668d701378c7b16bfebe8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): skills/ppt-master/scripts/project_utils.py:260-274 | skills/ppt-master/scripts/project_utils.py:306-320 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/project_utils.py"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"24b83babc84337cf895a6978486e80388a77d9813919ab08fdfc669cd935ca42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/checker.py:2265-2280 | skills/ppt-master/scripts/svg_quality/checker.py:4560-4574 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_quality/checker.py:2265\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2265}}}],"partialFingerprints":{"codehealthFindingId/v1":"9460787e2721b04c9accc9bba48e789ee01f934bff1b698c1af5909ad0b1857e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/checker.py:4909-4923 | skills/ppt-master/scripts/svg_quality/checker.py:4983-4998 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_quality/checker.py:4909\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":4909}}}],"partialFingerprints":{"codehealthFindingId/v1":"05c404784adcd2a839bcf719181ed29ba0f8ccd1a7c4f3275aaecb6533e1af09"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/text_properties.py:699-713 | skills/ppt-master/scripts/svg_to_pptx/drawingml/text_properties.py:734-748 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/text_properties.py:699\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/text_properties.py"},"region":{"startLine":699}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b5a0b204706f912e8cf6863021e5faa860f369c1c81b620fcb41a3fdee90b24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1248-1261 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1495-1508 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:4489-4502 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1248\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1248}}}],"partialFingerprints":{"codehealthFindingId/v1":"11c2b8563d690807b5f4532a905c853f568940ccb9ce2eda7ca4700874b8fd8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1705-1718 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1788-1801 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1856-1869 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1705\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1705}}}],"partialFingerprints":{"codehealthFindingId/v1":"114e23422552a9553861b0ddb0379907cb280e72e55b94c724df90ba73e3ad91"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): skills/ppt-master/scripts/confirm_ui/server.py:1923-1936 | skills/ppt-master/scripts/svg_editor/server.py:1216-1229 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1923}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8e711d083b67d672e4be9a4b949b2b43e0d189a995a73fb7bb5d838f6ef67c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): skills/ppt-master/scripts/native_enhance_pptx_core.py:519-532 | skills/ppt-master/scripts/native_enhance_pptx_core.py:557-570 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"532d0090cd85a8566e0367e99030867189ec46d534efd59184a95bdc3535f386"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/checker.py:3665-3678 | skills/ppt-master/scripts/svg_quality/checker.py:3683-3696 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3665}}}],"partialFingerprints":{"codehealthFindingId/v1":"80e5b8515414418b95743ed425318d274e477abedc6b8172a2cddc0971a64b70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py:1116-1130 | skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py:1154-1167 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py:1116\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":1116}}}],"partialFingerprints":{"codehealthFindingId/v1":"95e1327c3d8865ae646fb77eb9b6d98cc5ba296e5bcfa51d6b56d29a26199534"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:945-958 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:1094-1107 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:945\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":945}}}],"partialFingerprints":{"codehealthFindingId/v1":"08eed517e3160651f2f5a57a58aa615d198e274d4254af3427f9636cbed5be35"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): skills/ppt-master/scripts/svg_position_calculator.py:1122-1134 | skills/ppt-master/scripts/svg_position_calculator.py:1139-1151 | skills/ppt-master/scripts/svg_position_calculator.py:1156-1168 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":1122}}}],"partialFingerprints":{"codehealthFindingId/v1":"accd5e8a51e78ecc3131484f34f72a21aab896bad15c1543bd8b3242135d84cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/confirm_ui/server.py:1424-1436 | skills/ppt-master/scripts/svg_editor/server.py:1054-1067 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/confirm_ui/server.py:1424\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1424}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23d82d73b7bf44bbe11e9c7dd0be85c8c3d40dfae0d641cd08b374917360495"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/confirm_ui/server.py:1564-1576 | skills/ppt-master/scripts/svg_editor/server.py:461-475 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1564}}}],"partialFingerprints":{"codehealthFindingId/v1":"492f6c983892b46915457c9b51d101005e2308904165747f9d55b863a7cf68f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/confirm_ui/server.py:1880-1892 | skills/ppt-master/scripts/svg_editor/server.py:1188-1202 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/confirm_ui/server.py:1880\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1880}}}],"partialFingerprints":{"codehealthFindingId/v1":"58f1997748cc3676275b2f322fc6f5be90cf42d7bad7d5e33a20a53e25a1a568"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/narration_sync.py:212-224 | skills/ppt-master/scripts/video_subtitles.py:99-111 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b32ae2a89699c33e826aa88ca5371e57cd941554968bfbbd83094f9169945e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/converter.py:330-342 | skills/ppt-master/scripts/pptx_to_svg/converter.py:352-364 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/converter.py:330\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"61a212ce22184173d7a0cdaec39c058152ca81c2634f48e6563e1df5dc10314c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:252-265 | skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:441-453 \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":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"754f27f0b4cb759eec6b3612fe1109ee2839679bf865c33740bd143c8e219c0f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py:1358-1371 | skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py:1402-1414 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py:1358\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":1358}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1bab71ede4c6ea5b7e92891b613cfd3d133105a79dc6b95f2ec759101d72c54"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/checker.py:803-815 | skills/ppt-master/scripts/svg_quality/checker.py:824-836 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_quality/checker.py:803\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"d645016ddade124c663f335bf9e7eed254e77feee4a0bae96581599e989e5a59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/animation_config.py:876-888 | skills/ppt-master/scripts/svg_to_pptx/animation_config.py:989-1001 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":876}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c89dc4273b7fbca3110f78c21379d185f4f3de05c20d772d0cefc69e51ddef2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:3297-3309 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:3398-3410 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:3297\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3297}}}],"partialFingerprints":{"codehealthFindingId/v1":"47d073e9eda9f20172cb86b6c3ed8367557abea61e4a69daea4de0fb07913b6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:3466-3478 | skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py:2687-2699 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:3466\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":3466}}}],"partialFingerprints":{"codehealthFindingId/v1":"db18e6a3848421b49af06f7ab7321c36d1ff54c4a96b6d96eef1d20b95617a7a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): skills/ppt-master/scripts/project_management/cli.py:896-907 | skills/ppt-master/scripts/project_management/cli.py:924-935 | skills/ppt-master/scripts/project_management/cli.py:945-956 | skills/ppt-master/scripts/project_management/cli.py:975-986 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/project_management/cli.py:896\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/project_management/cli.py"},"region":{"startLine":896}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e182ec61cf1880984f0789d0fe2aa80df51cf20f66e1c5d9bc6d0c68b3f0be9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/image_backends/backend_gemini.py:105-116 | skills/ppt-master/scripts/image_backends/backend_openrouter.py:119-131 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_backends/backend_gemini.py"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc822dfbf7a65da8eb631c38dc2bb9a9f4c5632d2a6b144deec53013a62b2998"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py:270-281 | skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py:384-395 \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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffcb3d2918bcff5b357b47de36a6a93bb4cfc9e72b1eb5064cbf64d9dc289acf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/project_management/cli.py:583-595 | skills/ppt-master/scripts/project_management/cli.py:601-612 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/project_management/cli.py"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"5adcb23cafcdc2ea67413e7425ea4f816bee5c0d9e537f3c1f67dd92767b6355"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/project_utils.py:276-289 | skills/ppt-master/scripts/project_utils.py:322-333 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/project_utils.py:276\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/project_utils.py"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa00f1104812b2d86e084b5f22088be13ee4d33d3f52c086be75f1c02e42afd3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/prompt_audit.py:1317-1329 | skills/ppt-master/scripts/prompt_audit.py:1332-1343 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/prompt_audit.py:1317\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/prompt_audit.py"},"region":{"startLine":1317}}}],"partialFingerprints":{"codehealthFindingId/v1":"ece271f26439ceff9056d206101e1b8693bd9175ccf0e4c1e7a584a1fd2e86a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/source_to_md/doc_to_md.py:629-646 | skills/ppt-master/scripts/source_to_md/doc_to_md.py:759-770 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"6204d912278df9f941b800eac1f6fc9414e746f2d8843cb5aba54170b4433418"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/source_to_md/pdf_to_md.py:1161-1172 | skills/ppt-master/scripts/source_to_md/pdf_to_md.py:1178-1189 \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":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":1161}}}],"partialFingerprints":{"codehealthFindingId/v1":"89877a5f791915bfdfc1c65b3a188f6abf617bd9096fdc9b5598a7909b50247e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/checker.py:2202-2213 | skills/ppt-master/scripts/svg_quality/checker.py:2231-2242 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":2202}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ebc89e957c5255f9dc9163a0ed3fedd6e51cab9d0d45e2295b3385699778b1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/animation_config.py:1131-1142 | skills/ppt-master/scripts/svg_to_pptx/animation_config.py:1206-1217 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/animation_config.py"},"region":{"startLine":1131}}}],"partialFingerprints":{"codehealthFindingId/v1":"7453138e95e2a62f38368a26d7b2f62fc9eda089af913c4010600fd6be1ad3d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1193-1204 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1466-1477 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1193}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1e7037210db9ca7891c67e12c9a9a409fcaf09288fe058b3f0f9bb510aca223"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/styles.py:715-726 | skills/ppt-master/scripts/svg_to_pptx/drawingml/styles.py:737-748 \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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/styles.py"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd3da1dc81bdd35be2e7331967ce8d63a7f6e8f799be588274ac9c596215e5af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py:222-233 | skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py:242-253 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py:222\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"462907e1251f3a38f5e84d8cce04fe91ea0161e3f237f1485fe3eb401439e4fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:1430-1441 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:3014-3025 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1430}}}],"partialFingerprints":{"codehealthFindingId/v1":"99420b45abc68af8e7c6fabba28bf889cf04bc5210cf75baf24e681106354030"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 6): skills/ppt-master/scripts/image_backends/backend_modelscope.py:99-110 | skills/ppt-master/scripts/image_backends/backend_qwen.py:131-152 | skills/ppt-master/scripts/image_backends/backend_siliconflow.py:127-137 | skills/ppt-master/scripts/image_backends/backend_stability.py:91-101 | skills/ppt-master/scripts/image_backends/backend_volcengine.py:131-143 | skills/ppt-master/scripts/image_backends/backend_zhipu.py:132-142 \u2014 before extracting anything, compare \u0060skills/ppt-master/scripts/image_backends/backend_qwen.py\u0060 and \u0060skills/ppt-master/scripts/image_backends/backend_siliconflow.py\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 92 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_backends/backend_modelscope.py"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"d80c69a7c5d78488681db9bc49ac64bf0ad202406300680cb26fce38c678ffa3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/batch_validate.py:241-251 | skills/ppt-master/scripts/svg_quality/checker.py:6910-6920 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/batch_validate.py"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"90d05a9be8a4927a5b19a1b7c9bb819add3f4c58da600f35bc0180211ca01faa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/narration_sync.py:191-201 | skills/ppt-master/scripts/video_subtitles.py:78-88 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"57dcdf5657dec7a53c56fa20e91dce159c4e22a771d22dd7b6fd111cd325f966"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/pptx_animations.py:666-676 | skills/ppt-master/scripts/pptx_transitions.py:1069-1081 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_animations.py:666\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"a06073479d20b620f8a50e313704942b7fc631cf99c2a7182385552643827866"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py:1272-1282 | skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py:1303-1313 \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":"skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py"},"region":{"startLine":1272}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5a1299a5223dc3969b45fe19453a07ee7ac1704f01ed2371e14e3790f3fe012"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/source_to_md.py:454-464 | skills/ppt-master/scripts/source_to_md/_batch.py:139-150 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/source_to_md.py"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"890d6f6ffba4f0b5e8c1a3fa00a4b10507fdf714512bcfe5ff80336c36614e62"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/checker.py:466-476 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py:566-576 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"0760312431b3ac236011d0732e4bbcd5fef4f0e4b59e22ea6237375e61d23056"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:574-584 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:963-973 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:574\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"804f0ba21abf4fa494aa10853ec6eeba855af10ed046f2a7f544885e6e08df91"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py:1537-1547 | skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py:1770-1780 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1537}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ce6fe9a1ea4d160ca4f0504d6c1c5a2f3e44a28148ecc6c851cd42d49636c62"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py:204-214 | skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py:215-225 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py:204\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"95bbdb049d30f05c23eff65a990395d974069bd8a40091bfebe867312af66735"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:1528-1538 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:3135-3146 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1528}}}],"partialFingerprints":{"codehealthFindingId/v1":"a200bb6b1d4ad427f146834f31b83a93707844099847bee8608af5405919ed9f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py:892-902 | skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py:925-935 \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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":892}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0c35c7c134680c185b904fa85ebb6595e9f4d4baf7fcfd1b764c4e5ed1df8a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): skills/ppt-master/scripts/tts_backends/backend_cosyvoice.py:64-74 | skills/ppt-master/scripts/tts_backends/backend_qwen.py:55-65 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/tts_backends/backend_cosyvoice.py"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3e42caf247d29499f1d58481b8202c1d060eb93cc6dee1d190edc05e77f03f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/confirm_ui/server.py:189-198 | skills/ppt-master/scripts/svg_editor/server.py:1091-1100 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"f436b0d95812cabfa76b0d87354780a93c4b583ec839255694b104d4f1b80325"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/confirm_ui/server.py:1577-1586 | skills/ppt-master/scripts/svg_editor/server.py:476-485 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1577}}}],"partialFingerprints":{"codehealthFindingId/v1":"c530e37a1e08e35e97401a26518f022073486c79d924b22ef4eec6975836a0d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/image_backends/backend_openai.py:492-501 | skills/ppt-master/scripts/image_backends/backend_openai.py:589-598 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/image_backends/backend_openai.py:492\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_backends/backend_openai.py"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"f43393d645702b0c84e5a1ca8636dc4552531a1e28d07b31a89b17a3c38b2189"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/pptx_animations.py:1396-1405 | skills/ppt-master/scripts/pptx_animations.py:1420-1429 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_animations.py:1396\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1396}}}],"partialFingerprints":{"codehealthFindingId/v1":"d478a16097eaacec868d1488342510a17774c7da09c7fa641370b7eb56b93243"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/pptx_animations.py:2425-2434 | skills/ppt-master/scripts/pptx_animations.py:2454-2463 \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":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":2425}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc2fe2837bfd0f7531091b540723a14008caff69d58dbfe88da88333ecff4ff1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/converter.py:453-462 | skills/ppt-master/scripts/pptx_to_svg/converter.py:467-476 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/converter.py:453\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/converter.py"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e4f257cc75a25217928694f3cb5d99ec3eddbbc31014ce7c0c6e930bb7accb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/effect_to_svg.py:114-123 | skills/ppt-master/scripts/pptx_to_svg/effect_to_svg.py:134-144 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/effect_to_svg.py"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c3e4287a33a0f855faf4e657715d651b9a104646822d559eeddc650541b2f8b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py:1229-1238 | skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py:1262-1271 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py:1229\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":1229}}}],"partialFingerprints":{"codehealthFindingId/v1":"aff0c92e9a919bc3958a405fb3d8483d2ea9cc23a29bb5d1439fd24f9fb3793d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/svg_authoring_view.py:577-586 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py:507-516 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_authoring_view.py"},"region":{"startLine":577}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8473d8dc507b022ba625775e4fc0d95ade89aebf8415e0115d3279fb8ec9a3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/svg_position_calculator.py:421-430 | skills/ppt-master/scripts/svg_position_calculator.py:558-567 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_position_calculator.py:421\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea2077d2d31202f46ffe2ae1fd02beee2499bb119e448a12786214232439dbea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/checker.py:1638-1647 | skills/ppt-master/scripts/svg_quality/checker.py:2232-2242 \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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":1638}}}],"partialFingerprints":{"codehealthFindingId/v1":"b21d81805660cddf80acb49a0ff9fbf5a053c1ca702084cd63cbe855cd0c7a3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/svg_contracts.py:732-741 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:943-952 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_quality/svg_contracts.py:732\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":732}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2e833791a07c7ad252dccf63137dd9cebeff6451a0bd7619e91afce665f84e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/svg_contracts.py:1095-1104 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:1107-1118 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_quality/svg_contracts.py:1095\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":1095}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd786bcd0ccb03125f059aa39cb41ae80fa1aaa971a001834df861ec5dd9ab7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/text_properties.py:408-417 | skills/ppt-master/scripts/svg_to_pptx/geometry_properties.py:93-102 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/text_properties.py"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"16b04b3fdb51ba314d001c7b5f147c879a6ae31b1b1347b6fe873d6a4ed7ff97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py:774-783 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py:956-965 \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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":774}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc9e309525c62c4433403bc5ec30ff2a97944f06e9db54ce107aa2ed169e12d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py:1626-1635 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py:1685-1695 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":1626}}}],"partialFingerprints":{"codehealthFindingId/v1":"e18172f5fe872bcd13a8bc2d2a33ac9523ede70b12f7cff799783a422460107a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): skills/ppt-master/scripts/image_gen.py:758-766 | skills/ppt-master/scripts/pptx_intake.py:58-66 | skills/ppt-master/scripts/project_management/cli.py:163-171 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/image_gen.py:758\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"394a6b25890b6516ae4940a3b69b5dcbb02cc5230bf6f9caa0dc4db7187814e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): skills/ppt-master/scripts/image_sources/provider_openverse.py:65-73 | skills/ppt-master/scripts/image_sources/provider_pexels.py:69-77 | skills/ppt-master/scripts/image_sources/provider_pixabay.py:72-82 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/image_sources/provider_openverse.py:65\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_sources/provider_openverse.py"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"1db0bca9e66b975a2017e30234c5926fa187bf98beedb2d6e80bb05330d5bc02"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): skills/ppt-master/scripts/svg_quality/svg_contracts.py:555-563 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:731-739 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:942-950 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"aff932c55eacceec89a106937a37c634252348ee9e7f3fde8556793758e20068"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/mirror_template_materialize.py:2634-2642 | skills/ppt-master/scripts/mirror_template_materialize.py:2643-2651 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/mirror_template_materialize.py"},"region":{"startLine":2634}}}],"partialFingerprints":{"codehealthFindingId/v1":"51be6fcbc2cc7b730183fa53ff8865fd27ea749109d929681c169d386357055d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/pptx_animations.py:576-584 | skills/ppt-master/scripts/pptx_transitions.py:1027-1036 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_animations.py:576\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":576}}}],"partialFingerprints":{"codehealthFindingId/v1":"51a324446f33500ac0e5bad17e2ce0055d295d05836f6e72292e528b0ca6da3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/pptx_animations.py:707-715 | skills/ppt-master/scripts/pptx_transitions.py:1132-1142 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fca9dc4677005fd67b8b5b3c2fbcd8cda30f7b3aed021a4c9f0fd258574deb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py:1462-1470 | skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py:1491-1499 \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":"skills/ppt-master/scripts/pptx_to_svg/chart_to_svg.py"},"region":{"startLine":1462}}}],"partialFingerprints":{"codehealthFindingId/v1":"da28a12e37cbb42857e2a361bd093f6eeb8bb989c06af707bf7219db335ffc27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:198-206 | skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:348-356 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:198\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"745d4babeeb387083cb03aa2203cb5248ff0216bed402aa303a7f40d1f7c4252"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:271-280 | skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:454-462 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:271\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"1864c2ddde1eaee48e287fd8bbadd63ead846f8bbb5a0476e55491938a00bda0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:460-468 | skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:585-593 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py:460\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/preset_authoring.py"},"region":{"startLine":460}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1942d63c4473cfcd12587a096bbb946cdbf311b2fe3132ff357176af7b6f26a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/shape_walker.py:428-436 | skills/ppt-master/scripts/pptx_to_svg/shape_walker.py:460-468 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/shape_walker.py"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d4acbe0e74f1a56d28370e5756a5ac83f7c4d26f4778550e77d217ce3078465"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/source_to_md/doc_to_md.py:673-681 | skills/ppt-master/scripts/source_to_md/doc_to_md.py:787-795 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":673}}}],"partialFingerprints":{"codehealthFindingId/v1":"4063de74f09fdb5de3ecee639be802b3bb83d7212a18b27b747dc38bdbb1973a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/source_to_md/doc_to_md.py:1046-1054 | skills/ppt-master/scripts/source_to_md/doc_to_md.py:1242-1250 \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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":1046}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a7ca0b449ee99d4ae75e98330c3f3f051bc1c0df0f79e297946809828849560"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/svg_editor/server.py:520-532 | skills/ppt-master/scripts/svg_editor/server.py:538-546 \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":"skills/ppt-master/scripts/svg_editor/server.py"},"region":{"startLine":520}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f49661b06a771213ef409de859e89b99ba02ae8c48947d868b353ea41afd33"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/svg_editor/server.py:791-804 | skills/ppt-master/scripts/svg_editor/server.py:911-919 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_editor/server.py"},"region":{"startLine":791}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1022ed74adc4153649b7b95949a48fa9ffd50197ec40bb87d2f43c7f8efd58a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/theme_colors.py:131-139 | skills/ppt-master/scripts/svg_to_pptx/drawingml/theme_fonts.py:82-90 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/theme_colors.py"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"0af129c1d99e89d014aa83be9c090732bcde557ce3827d1e474c390d05ea67ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py:567-575 | skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py:591-599 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d3c96bfc474dee2081ba131fd0d0c1eb724fb72aef487cb26816ca2d3ad02ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:451-459 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:480-488 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"63eff9966db568175271c44dc6e0f3292be0c205bc76c9984e27f2187a1eb0dc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:1456-1465 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:3028-3036 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:1456\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1456}}}],"partialFingerprints":{"codehealthFindingId/v1":"50981c6f986ca7bc1e29ea8b82d7510395311a86c9cb672eaadd8e7bf7a68a5a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:1968-1976 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:2965-2975 \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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1968}}}],"partialFingerprints":{"codehealthFindingId/v1":"abec260101f5b8d2d68af4be33c9920593be25015dd8a7cdefb537ef68b4ce73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py:2032-2042 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py:2966-2974 \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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":2032}}}],"partialFingerprints":{"codehealthFindingId/v1":"4801c9673e470952c8e39d9bb2143dac93b8bae1bdafd109c048933724ca04b4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): skills/ppt-master/scripts/pptx_to_svg/shape_walker.py:396-403 | skills/ppt-master/scripts/pptx_to_svg/shape_walker.py:430-437 | skills/ppt-master/scripts/pptx_to_svg/shape_walker.py:462-469 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/shape_walker.py"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"686bb11520cf0968c12dd632e508e14d3394137f90dbc7d39a77f326494fc6b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py:506-513 | skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py:566-573 | skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py:590-597 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"461581a83b10f23c426c8aee75c0395eca5ea2dc7451d7b30717b6228551ad19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/batch_validate.py:170-177 | skills/ppt-master/scripts/svg_quality/checker.py:6628-6635 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/batch_validate.py"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bef80dd047a614594e5ac786001c84a4b5e4d72cd3f5b606eb7c53e1d11a3fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/image_backends/backend_ideogram.py:113-120 | skills/ppt-master/scripts/image_backends/backend_stability.py:106-113 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_backends/backend_ideogram.py"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"2847a000b6684340bc391def02754a89f5226052bc2a187a52f7553757c3aac9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/narration_sync.py:161-168 | skills/ppt-master/scripts/video_subtitles.py:56-63 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/narration_sync.py"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7f94f479f902d35697b29e6c3cbb81690d4250c2c2edfdf26bd07cc8a2b5b56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/native_enhance_pptx_core.py:1835-1842 | skills/ppt-master/scripts/native_enhance_pptx_core.py:2181-2188 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1835}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e94543ac5b3e60ac830d2661765f1ae9ba7a0eee17fe3c7437e003c5dbf29bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/notes_to_audio.py:338-345 | skills/ppt-master/scripts/notes_to_audio.py:372-379 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/notes_to_audio.py:338\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/notes_to_audio.py"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d0ce13cfb334b1f0776a18075f438b47cf1a486428e29a99e12e00ff491a470"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/pptx_animations.py:729-736 | skills/ppt-master/scripts/pptx_animations.py:743-750 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f24a3d0526ab3d3df01efdd0af57c6f9910da75d8c247327fa24318f98fa362"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/pptx_animations.py:1604-1612 | skills/ppt-master/scripts/pptx_animations.py:1643-1650 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_animations.py:1604\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1604}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3e964de2b80379f6ab7823632f92bb0e539660175a2d1e4fc0c696b86468543"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/color_resolver.py:304-312 | skills/ppt-master/scripts/pptx_to_svg/color_resolver.py:363-370 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/color_resolver.py"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"31f75176be55ed91611add49342768096b519298ae89cd3c7c336d81aafcb3bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py:1346-1353 | skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py:1390-1397 \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":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":1346}}}],"partialFingerprints":{"codehealthFindingId/v1":"b15f4a32ba8c0d70783019df6098e83c26154989dfde7e682e228865d49f7bf4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py:372-379 | skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py:423-430 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e49a14862cc811c7498ded9a48a2cf3e99dc4697dfc4e6e6e2f2c9cdb33388e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/source_to_md/pdf_to_md.py:492-499 | skills/ppt-master/scripts/source_to_md/pdf_to_md.py:655-662 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/source_to_md/pdf_to_md.py"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df73130a875b40b5d6730c4842949c3e21e523d80f3a108b3accfca5d23eed1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/svg_position_calculator.py:881-888 | skills/ppt-master/scripts/svg_position_calculator.py:900-907 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e10d5199697861fb857550d33a2cd23f91bcc1320051fc3b966b650bca026c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/checker.py:6700-6707 | skills/ppt-master/scripts/svg_quality/checker.py:6756-6763 \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":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":6700}}}],"partialFingerprints":{"codehealthFindingId/v1":"1816ae00ec807b5d6d64258987296267e91a0cfa6028a01659bc70df7030eb00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:1561-1570 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:3175-3182 \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":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1561}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f8ea87c07bdc1f987618db48eae4043cbe3c5ef9f0016a4eb33af98baed4fa8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py:675-682 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py:696-703 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py"},"region":{"startLine":675}}}],"partialFingerprints":{"codehealthFindingId/v1":"80abc851f2150b0f12683bb681dd8cca29ab4c38c464910e4480b4ad0e7475ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py:903-910 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py:952-960 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py:952\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py"},"region":{"startLine":903}}}],"partialFingerprints":{"codehealthFindingId/v1":"85eeeff333bf90e6c47d5e75497aa42fc6e5e633b3a77f6a2d8b48ab6ec12608"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 17): skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:145-151 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:161-167 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:177-183 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:193-199 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:225-231 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:241-247 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:257-263 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:273-279 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:289-295 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:305-311 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:321-327 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:337-343 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:353-359 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:369-375 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:385-391 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:401-407 | skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:417-423 \u2014 all 17 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py:145\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca4fa247329362978f981e5aa5c7b31c38cc6db5b31768c3986fb6e3ff4e1450"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): skills/ppt-master/scripts/template_fill_pptx/selectors.py:18-24 | skills/ppt-master/scripts/template_fill_pptx/selectors.py:29-35 | skills/ppt-master/scripts/template_fill_pptx/selectors.py:40-46 | skills/ppt-master/scripts/template_fill_pptx/text_fill.py:102-108 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/template_fill_pptx/selectors.py"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebebbed078ddbaa571db728e508aeb280601720f78010aa61d8c5fe01eebb312"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): skills/ppt-master/scripts/native_enhance_pptx_core.py:1766-1772 | skills/ppt-master/scripts/native_enhance_pptx_core.py:1834-1840 | skills/ppt-master/scripts/native_enhance_pptx_core.py:2180-2186 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/native_enhance_pptx_core.py"},"region":{"startLine":1766}}}],"partialFingerprints":{"codehealthFindingId/v1":"fec0e7f6c1ad15655c656b0948e3cee2cfd25a9ef7e5108593e8ca8bb81edcca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): skills/ppt-master/scripts/pptx_to_svg/color_resolver.py:593-599 | skills/ppt-master/scripts/pptx_to_svg/color_resolver.py:609-615 | skills/ppt-master/scripts/pptx_to_svg/color_resolver.py:651-657 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/color_resolver.py:593\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/color_resolver.py"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8c09c151540461804e3dc9117a668dee4274263df97213d183441858c322629"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/beautify_identity.py:268-274 | skills/ppt-master/scripts/beautify_inventory.py:172-178 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/beautify_identity.py"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"c788c23ed48090b1997cc2d389cd75d07cb3ab8e5293178720fb94898b88c9ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/finalize_svg.py:457-463 | skills/ppt-master/scripts/svg_finalize/align_embed_images.py:633-639 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/finalize_svg.py:457\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/finalize_svg.py"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c617fe9e5131ca8c40ea74c75287f82f1c26974592466ef7d432ef933515b03"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/image_gen.py:571-577 | skills/ppt-master/scripts/image_search.py:1375-1381 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"67c0a5a16a6398cceed35985d7f3e4a425298308dd8a6193e9a1ba91e7c2bb72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/image_sources/provider_openverse.py:75-82 | skills/ppt-master/scripts/image_sources/provider_wikimedia.py:126-132 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/image_sources/provider_openverse.py:75\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_sources/provider_openverse.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d6e1c1a356da2cf7f6b8046d9240d10afbca1a68a1f718f4463c840c06ba272"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/pptx_animations.py:1636-1642 | skills/ppt-master/scripts/pptx_animations.py:1668-1674 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1636}}}],"partialFingerprints":{"codehealthFindingId/v1":"d72a9693562925dc2bd6ac0c18f3ac2cd624d9d3bac26a772f3c941fd682c1d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/color_resolver.py:668-674 | skills/ppt-master/scripts/pptx_to_svg/color_resolver.py:706-712 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/color_resolver.py:668\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/color_resolver.py"},"region":{"startLine":668}}}],"partialFingerprints":{"codehealthFindingId/v1":"695d09c83f0761b0977b1e88ddab6cb062a6b22a27dea28a7f16f61497da7ccb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py:504-510 | skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py:690-696 \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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e802ca0bed25b276eb59bf9d7d31d23a49d8dd6e50ba8e3b39c31e5dc751fc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py:954-961 | skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py:992-998 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":954}}}],"partialFingerprints":{"codehealthFindingId/v1":"99e87891e22bf40a8e1f25727f5799840df4c5433a902ed55be5d028d80b30e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/source_to_md/web_to_md.py:394-400 | skills/ppt-master/scripts/source_to_md/web_to_md.py:407-413 \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":"skills/ppt-master/scripts/source_to_md/web_to_md.py"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"d25319147ee9c32ed765560210e871c9621eda9381b379846ac93fdfe2d0bcbe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/svg_position_calculator.py:657-663 | skills/ppt-master/scripts/svg_position_calculator.py:747-753 \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":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fc1235dbc927a31eacc32431081c6049fa4c81729283226bf292bea3df46bb9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/checker.py:3005-3011 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py:1454-1460 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_quality/checker.py:3005\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3005}}}],"partialFingerprints":{"codehealthFindingId/v1":"db4f5eb1d2dd5b45b7ace1c840d1c2bc5c097506632b22eeaefaee63ca3eca94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/checker.py:3312-3318 | skills/ppt-master/scripts/svg_quality/checker.py:3399-3405 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_quality/checker.py:3312\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/checker.py"},"region":{"startLine":3312}}}],"partialFingerprints":{"codehealthFindingId/v1":"d90780d552502c9106eae0e5d768384dc02442532626c9184535ced4845eb3d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/svg_contracts.py:751-757 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:972-978 \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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e9ca95f829b2dfa15745097608631622234055a095d0758e7307a5aef09c3a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/svg_contracts.py:899-905 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:1034-1040 \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":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":899}}}],"partialFingerprints":{"codehealthFindingId/v1":"eae67b1bac4f9ea055d71a8e474b13ffe9df69a346bb2b2b4f74d4d562b9261d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1180-1186 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:4443-4449 \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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1180}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d7a7333ae7ba3c1a39ee0b37b447b792633227710544af6ae8404effa38b722"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py:798-804 | skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py:806-813 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_xml.py"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d9368711e3b1b9c69ea53c3fcea32baf3c05311a349e8409bc65d78092b1ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:905-911 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:1134-1140 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:1134\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":905}}}],"partialFingerprints":{"codehealthFindingId/v1":"c24347165dc31ad322075385b65e35b01cbab5c72d5f39151853046824028272"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py:615-621 | skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py:651-657 \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":"skills/ppt-master/scripts/svg_to_pptx/shape_boolean.py"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"8273cdf05aaec39609fb58bebe19315a4eb1b0e7d8ca417bb4c96c75af70e3e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): skills/ppt-master/scripts/template_fill_pptx/checker.py:64-70 | skills/ppt-master/scripts/template_fill_pptx/checker.py:81-87 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/template_fill_pptx/checker.py"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"a868911222f36abb6a058e535cac8acd1e020c206ea29c10da812cf3c0a1279c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py:508-514 | skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py:516-521 | skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py:523-528 | skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py:530-535 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py:508\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ee4cefb4e8fbba084b036d5da0da8ba83ccf9e5a009543451c944b0e076ade0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): skills/ppt-master/scripts/image_backends/backend_bfl.py:121-126 | skills/ppt-master/scripts/image_backends/backend_fal.py:80-85 | skills/ppt-master/scripts/image_backends/backend_replicate.py:104-109 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_backends/backend_bfl.py"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"7db9fa9d287c7aaf80967e3c4766db3386c9f8ec523691129c3f0577d7907727"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): skills/ppt-master/scripts/template_fill_pptx/chart_fill.py:147-152 | skills/ppt-master/scripts/template_fill_pptx/chart_fill.py:158-163 | skills/ppt-master/scripts/template_fill_pptx/chart_fill.py:169-174 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/template_fill_pptx/chart_fill.py"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"de8b975664954e06d1bc474c36f9256115c202744e6a010c24b2abf67f0f9b87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py:140-145 | skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py:158-164 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py:140\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"0868e154a40f006c7946a14ca16338f2c68e490e688b5fb580077b30cac7c277"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/preset_registry_to_svg.py:105-110 | skills/ppt-master/scripts/pptx_to_svg/preset_registry_to_svg.py:114-119 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/pptx_to_svg/preset_registry_to_svg.py:105\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/preset_registry_to_svg.py"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa98f5fad0e714a43014964aec151e6683fc88f38684dec64a87e416eace66dc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/svg_position_calculator.py:222-229 | skills/ppt-master/scripts/svg_position_calculator.py:265-270 \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":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c6ac40bd82f78d902110a076c373c07c318203369a2a7bb6850192dee746a5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/svg_quality/svg_contracts.py:474-483 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:584-589 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_quality/svg_contracts.py:474\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"579e5d29b9e4a8d604197d12bd3cf7cb703e23bfbf6a8dba472c8e0406759d20"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1774-1779 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:1843-1848 \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":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1774}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc59b6ba15e84b7df52dade4573f0903d1c15e39305c21f01214b503eaf4e20d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py:601-609 | skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py:1132-1137 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py:601\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_data.py"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"5456a9e698b247a699c19799fafafefe6cbe1cfaf969843ec995e14affd563e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/template_fill_pptx/ooxml.py:113-118 | skills/ppt-master/scripts/template_fill_pptx/ooxml.py:156-161 \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":"skills/ppt-master/scripts/template_fill_pptx/ooxml.py"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbdef4626ef1a4c05a3070dc57d885f132e15d24a80affb28451c84384af91e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/template_fill_pptx/table_fill.py:20-25 | skills/ppt-master/scripts/template_fill_pptx/text_fill.py:19-24 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/template_fill_pptx/table_fill.py"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"a71f684d8153aa3ba726f5499f9699cf37cb53bbe3f5a1cb8062e763f2c88e5f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/template_fill_pptx/text_fill.py:36-41 | skills/ppt-master/scripts/template_fill_pptx/text_fill.py:52-57 \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":"skills/ppt-master/scripts/template_fill_pptx/text_fill.py"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"791f5d5b92befbfc0e78b42dec608fb66036bbdf7e3291f3436afd33f556251d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/template_fill_pptx/validator.py:249-254 | skills/ppt-master/scripts/template_fill_pptx/validator.py:285-290 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/template_fill_pptx/validator.py:249\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/template_fill_pptx/validator.py"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e1c97b03cfeea76b6a38f75d4c7a9d417e51461a2da71b2cd60d82a46dc67c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): skills/ppt-master/scripts/total_md_split.py:178-183 | skills/ppt-master/scripts/total_md_split.py:194-199 \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":"skills/ppt-master/scripts/total_md_split.py"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4bd92798091ae7f0293ea5afdab89832e31478655054426f4595b2575bd5b8d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): skills/ppt-master/scripts/svg_quality/svg_contracts.py:374-380 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:471-481 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:583-587 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:757-761 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_quality/svg_contracts.py:374\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":374}}}],"partialFingerprints":{"codehealthFindingId/v1":"df146b02cd23f1e27a9a79dc02baeb52956f790946c2529b4bcccaadfa6a8316"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): skills/ppt-master/scripts/svg_quality/svg_contracts.py:582-586 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:756-760 | skills/ppt-master/scripts/svg_quality/svg_contracts.py:977-981 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_quality/svg_contracts.py:582\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality/svg_contracts.py"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c0d2180b0057e7369d9e3241cd2ae1c206249ef9c038253707ad4a8d7454362"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): skills/ppt-master/scripts/template_fill_pptx/checker.py:20-24 | skills/ppt-master/scripts/template_fill_pptx/checker.py:34-38 | skills/ppt-master/scripts/template_fill_pptx/checker.py:48-52 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/template_fill_pptx/checker.py"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac8474273f4b1aec9c6641cae077ed90f809fbffac12877769adee2794513cc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): skills/ppt-master/scripts/attribution_guard.py:141-145 | skills/ppt-master/scripts/attribution_guard.py:175-179 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/attribution_guard.py:141\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/attribution_guard.py"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2c8f2c98a8c72fa8c2e27b05887d3c69a1a3fb3a52e8c38b54449a9f46685f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py:774-778 | skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py:861-865 \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":"skills/ppt-master/scripts/pptx_to_svg/normalized_chart_svg.py"},"region":{"startLine":774}}}],"partialFingerprints":{"codehealthFindingId/v1":"b05140fc0177dd1ecc01ef0179416a0b00f464867ab82fea697619c142d097f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): skills/ppt-master/scripts/source_to_md/doc_to_md.py:371-375 | skills/ppt-master/scripts/source_to_md/doc_to_md.py:394-398 \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":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6817be106b592e9e31da32cd860e5f1bcbfeea92a81c2556ac83a12fe40ce9f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): skills/ppt-master/scripts/source_to_md/doc_to_md.py:552-556 | skills/ppt-master/scripts/source_to_md/doc_to_md.py:590-594 \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. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/source_to_md/doc_to_md.py"},"region":{"startLine":552}}}],"partialFingerprints":{"codehealthFindingId/v1":"21e0225a7e1632317bca2eac261ea35b67dacd3a2bd55ed5fbbdae2830f41ef4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): skills/ppt-master/scripts/svg_finalize/align_embed_images.py:222-226 | skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py:3873-3877 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_finalize/align_embed_images.py"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"4db9eed6fcb37e0342728ed50c127aa75e3bb9827a549d6dc8381db335104d2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): skills/ppt-master/scripts/svg_position_calculator.py:1335-1339 | skills/ppt-master/scripts/svg_position_calculator.py:1343-1347 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_position_calculator.py"},"region":{"startLine":1335}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2750e49a39c6ffa763f086f39083d5fdc8d6b2de6d923bb815930d1ea283727"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py:574-578 | skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py:624-628 \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":"skills/ppt-master/scripts/svg_to_pptx/native_objects/chart_style.py"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"00cc218c31512e320e3e45f77f8ea1fcbbd287042f3805cdb224b6f7d1333cac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:2193-2197 | skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:2265-2269 \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. Read the line range as the matched WINDOW rather than a finished unit: at \u0060skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py:2193\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":2193}}}],"partialFingerprints":{"codehealthFindingId/v1":"973f6e7f7e29f37cade4626606a0afe7644b74bd88dfbbf51e5e8967af2f77d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): skills/ppt-master/scripts/template_import/manifest.py:526-530 | skills/ppt-master/scripts/template_import/manifest.py:533-537 \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. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/template_import/manifest.py"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"e530ba74989e2d7d3fcf14c2dda87ee7f5ffcc6ad9718c190e8992f6049862fa"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py: skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py changed 57 times in last 90 days, max complexity 223. 18 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/builder.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"52ea53a867600431ec2b7cf0c057260d6e7dcbdc313eab899169a183a35002f2"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py: skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py changed 54 times in last 90 days, max complexity 191. 20 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5321a2299c80b188d1eed8394114e68fcd6bddf9827141efbe2a231977957acd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py: skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py changed 42 times in last 90 days, max complexity 93. 25 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/elements.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b16f5a9b82f7fa3fc0dedeb4fbb4e073eb882f306f070b78758d33b1421a48dd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py: skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py changed 53 times in last 90 days, max complexity 58. 31 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/converter.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"93ea13c10e1764b663bbccda57b4c0221ab34c248151d599119322518753144b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py: skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py changed 44 times in last 90 days, max complexity 47. 31 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_to_pptx/drawingml/utils.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7bff53839b0d7db8dc23646f8f9f8ea5a883a83a61a250eb0511466552dbd9f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: skills/ppt-master/scripts/pptx_to_svg/ln_to_svg.py: skills/ppt-master/scripts/pptx_to_svg/ln_to_svg.py changed 23 times in last 90 days, max complexity 62. 20 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/ln_to_svg.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"67b05f58f811c71a076494f8b217509424292bea7bd5975d5f94de005b971336"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: skills/ppt-master/scripts/confirm_ui/server.py: skills/ppt-master/scripts/confirm_ui/server.py changed 34 times in last 90 days, max complexity 37. 13 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/confirm_ui/server.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a98aff38390595ccdd87a0ed6a77d0e0a31ac6899a35f0f0f967b37a79b52c6f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py: skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py changed 43 times in last 90 days, max complexity 29. 31 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"03fb35851ad81f4732a5e23f71c2b9ac0e5403598e7204beaac0a885c8b1fb20"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: skills/ppt-master/scripts/image_gen.py: skills/ppt-master/scripts/image_gen.py changed 13 times in last 90 days, max complexity 67. 8 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/image_gen.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"18d2e85556b4ed0d5748917bacdb32236ea4da456fa63bf9d7a6eb66e8779e22"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: skills/ppt-master/scripts/pptx_animations.py: skills/ppt-master/scripts/pptx_animations.py changed 14 times in last 90 days, max complexity 56. 4 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_animations.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"58c9565b3ad271280dc6e6fbd0b45e689d170ed98c0b84d2675cffd2c16634c5"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 87 significant file(s) lose their only recent owner: skills/ppt-master/scripts/pptx_animations.py, skills/ppt-master/scripts/confirm_ui/server.py, skills/ppt-master/scripts/image_search.py, skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py, skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py, skills/ppt-master/scripts/source_to_md/doc_to_md.py, skills/ppt-master/scripts/svg_to_pptx/animation_config.py, skills/ppt-master/scripts/svg_editor/server.py (\u002B79 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a8560a36aca5fdaa326cd1f6f35f8a9be1421ccd780bb348e226a8bbc0d5ec18"}},{"ruleId":"D19","level":"note","message":{"text":"The README begins with a long banner containing release/commit-shield badges, sponsor links, and an Agentic Leaderboard badge but does not state the project\u0027s license type (MIT vs. another) explicitly in text or a badge, leaving it ambiguous whether the MIT license is the one shown.: Add a License section stating the exact license used so badge readers can confirm it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"26409eb042f56ff6be441baf804530b65fab7761d8b18b08290e21a2abf71b6a"}},{"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":"7ba20707fb7bace087025e259bd750da0e2ca7e4f6775b90669b9c279bfad23d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a88d6a4f7f3d85d17bbb8be96bc946ccfd1e351462e60fa2eb3b71dbbb49cbf1"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb59310d2d61bf23352aba601bfb7e1ea1f5bb46603f552a5de1dabd84e7ace0"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c4ee4555075d83247b3ce176101e4e39397de0f485dfcef42a0963a0b661917c"},"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":"D35","level":"warning","message":{"text":"Change coupling: register_template.py \u2194 svg_quality_checker.py: \u0060skills/ppt-master/scripts/register_template.py\u0060 and \u0060skills/ppt-master/scripts/svg_quality_checker.py\u0060 change together 62% of the time (8 of the 13 commits that touched the less-changed of the two, renames followed) 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/register_template.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c0626569a4b7b9ed4beb7f2988979ef14ddba6e9de4390b50160fbc8ded2296"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: error_helper.py \u2194 svg_quality_checker.py: \u0060skills/ppt-master/scripts/error_helper.py\u0060 and \u0060skills/ppt-master/scripts/svg_quality_checker.py\u0060 change together 59% of the time (13 of the 22 commits that touched the less-changed of the two, renames followed) 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/error_helper.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bf30e8d773276218440f37c20e3fb95bcdea42f4120382918603d2ccb7d90a8"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: svg_quality_checker.py \u2194 template_structure.py: \u0060skills/ppt-master/scripts/svg_quality_checker.py\u0060 and \u0060skills/ppt-master/scripts/svg_to_pptx/pptx_package/template_structure.py\u0060 change together 59% of the time (17 of the 29 commits that touched the less-changed of the two, renames followed) 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 (that is what the inversion buys) and the thing to add is a comment saying so, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality_checker.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ece6c5e87b0c3b95e40bf780533e3bd99446f53ff791938ff017ae5adc4f29e3"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: tbl_to_svg.py \u2194 __init__.py: \u0060skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py\u0060 and \u0060skills/ppt-master/scripts/svg_to_pptx/native_objects/__init__.py\u0060 change together 55% of the time (6 of the 11 commits that touched the less-changed of the two, renames followed) 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 (that is what the inversion buys) and the thing to add is a comment saying so, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1237ac3c6014b99d3f4024f3c1f44db94b13b0bfaec7a50abb795238dcc8d986"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: tbl_to_svg.py \u2194 table.py: \u0060skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py\u0060 and \u0060skills/ppt-master/scripts/svg_to_pptx/native_objects/table.py\u0060 change together 55% of the time (6 of the 11 commits that touched the less-changed of the two, renames followed) 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 (that is what the inversion buys) and the thing to add is a comment saying so, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5d3c7ccb76af4039c8923019a96eae4da14d00ca570d0a6abb5fde2076f1a52"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: config.py \u2194 error_helper.py: \u0060skills/ppt-master/scripts/config.py\u0060 and \u0060skills/ppt-master/scripts/error_helper.py\u0060 change together 50% of the time (11 of the 22 commits that touched the less-changed of the two, renames followed) 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/config.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4036f1342ffbdf0f1d825f9e1ea916ffead88472c417c7ee8b95f6f78d50e775"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: svg_quality_checker.py \u2194 marker_common.py: \u0060skills/ppt-master/scripts/svg_quality_checker.py\u0060 and \u0060skills/ppt-master/scripts/svg_to_pptx/native_objects/marker_common.py\u0060 change together 50% of the time (6 of the 12 commits that touched the less-changed of the two, renames followed) 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 (that is what the inversion buys) and the thing to add is a comment saying so, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"skills/ppt-master/scripts/svg_quality_checker.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3976de5fd283cf862066c882acd46f450c1c25daaeca4d2dbfceacfb5e671686"}},{"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":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ab512c9b2be18762635c0413d4a874e6a4dace884de608b8749a8987a2628cfa"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"da88eec79d38ca2f232bbe34dda4674f94ae788444278902d4372f4801de5c24"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"46b2c11efd7b89b4f753e0ad05f55700dc2267e47609360bf2b3f8d74be94348"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4f4d9521b4d3a292058ee72d63e5a9c2b179049765d925da2504355209b0df03"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"443f27256353d88709207b585d51f056128af2e481628cdf5ae287ac91bc1299"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d7ad3883ce451ee974720165bcf1b947b023ee947a66da5c16756d9f0e18058b"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4726c16525e0b7a583a0866de9f6c075ce2b36f23590482b0a0b4a81833c6185"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"19de5afd1fea8f4d899c33e7449b9d050e0d74509bb753460664de53533faad6"}}],"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-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":16,"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."]}]}