{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-4+qual-2+sec-2","generated_at":"2026-11-13T23:56:37.977690Z","repo":{"ref":{"host":"github.com","owner":"edandersen","name":"mvplove"},"default_branch":"master","clone_url":"https://github.com/edandersen/mvplove.git","html_url":"https://github.com/edandersen/mvplove","description":"A directory of Microsoft MVPs","stars":15,"forks":6,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":1876,"primary_language":"C#","license_spdx":null,"created_at":"2026-03-25T06:09:47Z","pushed_at":"2026-11-09T06:53:04Z","security_policy_url":null,"distribution":{"owner_created_at":"2011-01-05T13:24:04Z","owner_type":"User","release_assets":[]}},"commit_sha":"986cb7a30605d0e0b8e1738f0cd0649b8af776c5","profile":{"lines_by_language":{"JavaScript":28322,"C#":2696,"PowerShell":222,"Shell":208},"files_by_category":{"docs":104,"other":52,"config":29,"source":25,"vendored":17,"test":6,"binary":1},"source_lines":29875,"test_lines":1573},"pillars":{"ai_provenance":{"score":4.0,"confidence":0.81,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.0404,"suspected_share":0.0,"estimated_share":0.0404,"ai_artifacts":1.0,"flagged_work_units":0.0,"flagged_releases":null},"summary":"Explicit AI attribution on 4% of first-party code added; an estimated 4% including velocity signals."},"quality":{"score":49.2,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":55.2,"duplication":5.6,"lint":99.6,"testing":43.9,"docs":40.0,"type_safety":null,"process":null},"summary":"Code quality is poor: test-to-source ratio 0.05, no CI test run detected; 20% of function code in complex or long functions; 48% duplicated lines. Weakest area: duplication."},"security":{"score":71.1,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":93.6,"sast":93.0,"dependencies":null,"ci_actions":51.7,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: 6 high-severity SAST findings; 3 high-severity workflow issues. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":44.0,"attributed_commits":2.0,"attributed_commit_share":0.045454545454545456,"effective_loc":31516.0,"attributed_loc":1274.0,"attributed_loc_share":0.04042391166391674,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"GitHub Copilot coding agent: 2 attributed commits, 1,274 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot'","ref":"43c6c5fa68aa4281bcaf02bd59beffa7b9869374","url":"https://github.com/edandersen/mvplove/commit/43c6c5fa68aa4281bcaf02bd59beffa7b9869374","weight":0.9},{"kind":"attributed-commit","description":"GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot'","ref":"c33fc177ab4f8ea3bfb77453b175713fe59bcb06","url":"https://github.com/edandersen/mvplove/commit/c33fc177ab4f8ea3bfb77453b175713fe59bcb06","weight":0.9}],"data":{"attributed_loc_by_commit":{"c33fc177ab4f8ea3bfb77453b175713fe59bcb06":758,"43c6c5fa68aa4281bcaf02bd59beffa7b9869374":516},"tools":{"github-copilot":{"name":"GitHub Copilot coding agent","commits":2,"loc":1274,"first_seen":1775986469,"last_seen":1775987532}},"monthly":{"2026-03":{"loc":28317,"attributed_loc":0},"2026-04":{"loc":1675,"attributed_loc":1274},"2026-06":{"loc":1288,"attributed_loc":0},"2026-07":{"loc":0,"attributed_loc":0},"2026-08":{"loc":164,"attributed_loc":0},"2026-10":{"loc":0,"attributed_loc":0},"2026-11":{"loc":72,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":1.0,"workflow_agents":0.0,"tools_configured":1.0,"earliest_adoption":1775987532.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":".github/copilot-instructions.md (github-copilot configuration)","ref":".github/copilot-instructions.md","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/.github/copilot-instructions.md","weight":0.5}],"data":{"artifacts":[{"tool":"github-copilot","path":".github/copilot-instructions.md","added_at":1775987532}],"workflows":[],"tools":["github-copilot"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":16.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":4001.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":496.25267665952896,"median_loc_per_hour":162.51745458162048,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":29875.0,"index":0.502,"count:narrated_steps":3.0,"per_kloc:narrated_steps":0.1,"files:narrated_steps":2.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":24.0,"per_kloc:emoji_in_code":0.803,"files:emoji_in_code":7.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 1 - using first Check Number:","ref":"src/wwwroot/lib/jquery-validation/dist/additional-methods.js:314","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery-validation/dist/additional-methods.js#L314","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 1 - using first Check Number:","ref":"src/wwwroot/lib/jquery-validation/dist/additional-methods.js:465","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery-validation/dist/additional-methods.js#L465","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, handle focusin/focusout","ref":"src/wwwroot/lib/jquery/dist/jquery.slim.js:5556","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery/dist/jquery.slim.js#L5556","weight":0.0}],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":2.0,"secrets_low_confidence":0.0},"findings":[{"rule_id":"gitleaks/private-key","severity":"low","message":"Possible private-key secret in the current tree (test/docs/example file)","path":".copilot/skills/secret-handling/SKILL.md","line":48,"fingerprint":".copilot/skills/secret-handling/SKILL.md:private-key:48"},{"rule_id":"gitleaks/private-key","severity":"low","message":"Possible private-key secret in the current tree (test/docs/example file)","path":".squad/templates/skills/secret-handling/SKILL.md","line":48,"fingerprint":".squad/templates/skills/secret-handling/SKILL.md:private-key:48"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":11.0,"findings_high":6.0,"findings_medium":2.0,"findings_low":3.0,"weighted_findings":6.15,"scanned_lines":29653.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/wwwroot/js/agui-client.js","line":49,"fingerprint":"javascript.browser.security.insecure-document-method:src/wwwroot/js/agui-client.js:49"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `bubble.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/wwwroot/js/agui-client.js","line":49,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/wwwroot/js/agui-client.js:49"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/wwwroot/js/agui-client.js","line":115,"fingerprint":"javascript.browser.security.insecure-document-method:src/wwwroot/js/agui-client.js:115"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `bubble.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/wwwroot/js/agui-client.js","line":115,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/wwwroot/js/agui-client.js:115"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/wwwroot/js/agui-client.js","line":123,"fingerprint":"javascript.browser.security.insecure-document-method:src/wwwroot/js/agui-client.js:123"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `bubble.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/wwwroot/js/agui-client.js","line":123,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/wwwroot/js/agui-client.js:123"},{"rule_id":"opengrep/csharp.dotnet.security.audit.mass-assignment","severity":"medium","message":"Mass assignment or Autobinding vulnerability in code allows an attacker to execute over-posting attacks, which could create a new parameter in the binding request and manipulate the underlying object in the application. [confidence medium]","path":"src/Controllers/MvpController.cs","line":45,"fingerprint":"csharp.dotnet.security.audit.mass-assignment:src/Controllers/MvpController.cs:45"},{"rule_id":"opengrep/csharp.dotnet.security.audit.mass-assignment","severity":"medium","message":"Mass assignment or Autobinding vulnerability in code allows an attacker to execute over-posting attacks, which could create a new parameter in the binding request and manipulate the underlying object in the application. [confidence medium]","path":"src/Controllers/MvpController.cs","line":85,"fingerprint":"csharp.dotnet.security.audit.mass-assignment:src/Controllers/MvpController.cs:85"},{"rule_id":"opengrep/csharp.dotnet.security.audit.missing-or-broken-authorization","severity":"low","message":"Anonymous access shouldn't be allowed unless explicit by design. Access control checks are missing and potentially can be bypassed. This finding violates the principle of least privilege or deny by default, where access should only be permitted for a specific set of roles or conforms to a custom pol [confidence medium]","path":"src/Controllers/CopilotController.cs","line":5,"fingerprint":"csharp.dotnet.security.audit.missing-or-broken-authorization:src/Controllers/CopilotController.cs:5"},{"rule_id":"opengrep/csharp.dotnet.security.audit.missing-or-broken-authorization","severity":"low","message":"Anonymous access shouldn't be allowed unless explicit by design. Access control checks are missing and potentially can be bypassed. This finding violates the principle of least privilege or deny by default, where access should only be permitted for a specific set of roles or conforms to a custom pol [confidence medium]","path":"src/Controllers/HomeController.cs","line":8,"fingerprint":"csharp.dotnet.security.audit.missing-or-broken-authorization:src/Controllers/HomeController.cs:8"},{"rule_id":"opengrep/csharp.dotnet.security.audit.missing-or-broken-authorization","severity":"low","message":"Anonymous access shouldn't be allowed unless explicit by design. Access control checks are missing and potentially can be bypassed. This finding violates the principle of least privilege or deny by default, where access should only be permitted for a specific set of roles or conforms to a custom pol [confidence medium]","path":"src/Controllers/MvpController.cs","line":7,"fingerprint":"csharp.dotnet.security.audit.missing-or-broken-authorization:src/Controllers/MvpController.cs:7"}],"evidence":[],"data":{"rulesets":["javascript","csharp","bash"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":1.0,"findings":5.0,"findings_high":3.0,"findings_medium":2.0,"findings_low":0.0,"penalty":39.6},"findings":[{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/deploy.yml","line":15,"fingerprint":"unpinned-uses:.github/workflows/deploy.yml:15"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/deploy.yml","line":18,"fingerprint":"unpinned-uses:.github/workflows/deploy.yml:18"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/deploy.yml","line":37,"fingerprint":"unpinned-uses:.github/workflows/deploy.yml:37"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/deploy.yml","line":14,"fingerprint":"artipacked:.github/workflows/deploy.yml:14"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/deploy.yml","line":9,"fingerprint":"excessive-permissions:.github/workflows/deploy.yml:9"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":0.0,"signed_commit_share":0.2045,"unpinned_manifests":1.0},"findings":[],"evidence":[{"kind":"posture","description":".squad/templates/package.json has no lockfile alongside it (unpinned dependencies)","ref":".squad/templates/package.json","url":null,"weight":0.3}],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":2330.0,"function_nloc":22000.0,"mean_ccn":2.92,"p90_ccn":6.0,"complex_functions":34.0,"long_functions":6.0,"many_param_functions":0.0,"risky_nloc_share":0.1982},"findings":[],"evidence":[{"kind":"complex-function","description":"trigger in src/wwwroot/lib/jquery/dist/jquery.slim.js: complexity 54, 96 lines","ref":"src/wwwroot/lib/jquery/dist/jquery.slim.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery/dist/jquery.slim.js#L7741","weight":0.9},{"kind":"complex-function","description":"(anonymous) in src/wwwroot/lib/jquery/dist/jquery.slim.js: complexity 46, 66 lines","ref":"src/wwwroot/lib/jquery/dist/jquery.slim.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery/dist/jquery.slim.js#L1715","weight":0.7666666666666667},{"kind":"complex-function","description":"preventOverflow in src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js: complexity 42, 97 lines","ref":"src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js#L3015","weight":0.7},{"kind":"complex-function","description":"find in src/wwwroot/lib/jquery/dist/jquery.slim.js: complexity 40, 80 lines","ref":"src/wwwroot/lib/jquery/dist/jquery.slim.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery/dist/jquery.slim.js#L805","weight":0.6666666666666666},{"kind":"complex-function","description":"superMatcher in src/wwwroot/lib/jquery/dist/jquery.slim.js: complexity 36, 67 lines","ref":"src/wwwroot/lib/jquery/dist/jquery.slim.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery/dist/jquery.slim.js#L2445","weight":0.6},{"kind":"complex-function","description":"remove in src/wwwroot/lib/jquery/dist/jquery.slim.js: complexity 34, 54 lines","ref":"src/wwwroot/lib/jquery/dist/jquery.slim.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery/dist/jquery.slim.js#L5024","weight":0.5666666666666667},{"kind":"complex-function","description":"mapToStyles in src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js: complexity 33, 75 lines","ref":"src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js#L2178","weight":0.55},{"kind":"complex-function","description":"(anonymous) in src/wwwroot/lib/jquery-validation/dist/additional-methods.js: complexity 29, 62 lines","ref":"src/wwwroot/lib/jquery-validation/dist/additional-methods.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery-validation/dist/additional-methods.js#L527","weight":0.48333333333333334},{"kind":"complex-function","description":"style in src/wwwroot/lib/jquery/dist/jquery.slim.js: complexity 28, 43 lines","ref":"src/wwwroot/lib/jquery/dist/jquery.slim.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery/dist/jquery.slim.js#L6781","weight":0.4666666666666667},{"kind":"complex-function","description":"(anonymous) in src/wwwroot/lib/jquery/dist/jquery.slim.js: complexity 27, 62 lines","ref":"src/wwwroot/lib/jquery/dist/jquery.slim.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/jquery/dist/jquery.slim.js#L2282","weight":0.45}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":20443.0,"duplicated_lines":9792.0,"duplicated_share":0.479,"files":25.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: .copilot/skills/distributed-mesh/sync-mesh.ps1:1 and .squad/templates/skills/distributed-mesh/sync-mesh.ps1:1","ref":".copilot/skills/distributed-mesh/sync-mesh.ps1","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/.copilot/skills/distributed-mesh/sync-mesh.ps1#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: .copilot/skills/distributed-mesh/sync-mesh.sh:1 and .squad/templates/skills/distributed-mesh/sync-mesh.sh:1","ref":".copilot/skills/distributed-mesh/sync-mesh.sh","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/.copilot/skills/distributed-mesh/sync-mesh.sh#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/Controllers/MvpController.cs:14 and src/Controllers/MvpController.cs:50","ref":"src/Controllers/MvpController.cs","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/Controllers/MvpController.cs#L14","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/Models/MvpModels.cs:11 and src/getmvps/getmvps.cs:321","ref":"src/Models/MvpModels.cs","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/Models/MvpModels.cs#L11","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/Models/MvpModels.cs:116 and src/Models/MvpModels.cs:136","ref":"src/Models/MvpModels.cs","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/Models/MvpModels.cs#L116","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/Services/MvpDataService.cs:24 and src/Services/MvpDataService.cs:40","ref":"src/Services/MvpDataService.cs","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/Services/MvpDataService.cs#L24","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/Tools/AgentTools.cs:24 and src/Tools/McpTools.cs:17","ref":"src/Tools/AgentTools.cs","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/Tools/AgentTools.cs#L24","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js:13 and src/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js:9","ref":"src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js#L13","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js:873 and src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js:4692","ref":"src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js#L873","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js:6271 and src/wwwroot/lib/bootstrap/dist/js/bootstrap.js:4451","ref":"src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js","url":"https://github.com/edandersen/mvplove/blob/986cb7a30605d0e0b8e1738f0cd0649b8af776c5/src/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js#L6271","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":2.0,"weighted_findings":0.5,"scanned_lines":29653.0,"category:correctness":2.0},"findings":[{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":".copilot/skills/distributed-mesh/sync-mesh.sh","line":100,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:.copilot/skills/distributed-mesh/sync-mesh.sh:100"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":".squad/templates/skills/distributed-mesh/sync-mesh.sh","line":100,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:.squad/templates/skills/distributed-mesh/sync-mesh.sh:100"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.1053,"check:ci_present":1.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.6316,"test_lines":1573.0,"source_lines":29875.0,"test_ratio":0.0527,"ci_files":1.0,"cochange_share":0.1579,"cochange_commits":19.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/deploy.yml","ref":".github/workflows/deploy.yml","url":null,"weight":0.0}],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":0.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":73.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":989.0,"other_lines":28886.0,"files_blamed":25.0,"blame_failures":0.0,"quality:ai_findings":2.0,"quality:ai_per_kloc":2.022,"quality:other_findings":0.0,"quality:other_per_kloc":0.0,"security:ai_findings":0.0,"security:ai_per_kloc":0.0,"security:other_findings":11.0,"security:other_per_kloc":0.381,"security:ratio":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":true},"error":null}],"flags":[]}