{
  "schemaVersion": 1,
  "repositories": [
    {
      "name": "Syndical",
      "reportUrl": "/quality/scorecards/20261011111742754-syndical-a6ef69ef8d89/report.json",
      "sha256": "b050cbbb2b25c3b365f4592a8d2f6e22d0fbf1b5d4bbf3a2ad3e0b0d418f4375",
      "report": {
        "schemaVersion": 3,
        "repository": "Syndical",
        "startedAt": "2026-10-11T11:16:22.228Z",
        "source": {
          "commit": "a6ef69ef8d895cd1cbbaeb95e99bfdf102f3545f",
          "dirty": false,
          "contentSha256": "63163fbc964e5e5d7f19964f156f934de81fa3ff66f3ae5fc6a1ddfda0af8a13",
          "stableDuringRun": true,
          "finishedContentSha256": "63163fbc964e5e5d7f19964f156f934de81fa3ff66f3ae5fc6a1ddfda0af8a13"
        },
        "policy": {
          "id": "syndical-oss-quality-v2",
          "sha256": "0858c4f212e128d9f4895491a0e9ea3c4a42c1beab95088981ff3eccf70833f9",
          "sastRules": [
            {
              "id": "syndical.csharp.tls-validation-always-true",
              "severity": "high",
              "languages": [
                "csharp"
              ],
              "description": "HttpClientHandler certificate callbacks that explicitly accept every certificate."
            },
            {
              "id": "syndical.typescript.tls-verification-disabled",
              "severity": "high",
              "languages": [
                "javascript",
                "typescript"
              ],
              "description": "Explicit rejectUnauthorized:false settings and NODE_TLS_REJECT_UNAUTHORIZED=0 assignments."
            },
            {
              "id": "syndical.typescript.electron-context-isolation-disabled",
              "severity": "high",
              "languages": [
                "javascript",
                "typescript"
              ],
              "description": "BrowserWindow object literals explicitly disabling context isolation."
            },
            {
              "id": "syndical.typescript.electron-node-integration-enabled",
              "severity": "medium",
              "languages": [
                "javascript",
                "typescript"
              ],
              "description": "BrowserWindow object literals explicitly enabling renderer Node integration."
            },
            {
              "id": "syndical.typescript.sensitive-value-console-log",
              "severity": "high",
              "languages": [
                "javascript",
                "typescript"
              ],
              "description": "Direct console arguments named password, token, key or client secret; this is not a dataflow rule."
            }
          ],
          "duplication": {
            "minLines": 5,
            "minTokens": 50,
            "mode": "mild"
          },
          "methodology": {
            "revision": "csharp-source-v1",
            "csharp": {
              "version": "1.0.0",
              "dataRecordReviews": "tools/quality/csharp-data-records.json"
            }
          }
        },
        "tools": [
          {
            "name": "jscpd",
            "version": "5.4.0",
            "license": "MIT"
          },
          {
            "name": "OpenGrep",
            "version": "1.30.0",
            "license": "LGPL-2.1"
          },
          {
            "name": "ESLint",
            "version": "10.12.0",
            "license": "MIT"
          },
          {
            "name": "@eslint/js",
            "version": "10.0.1",
            "license": "MIT"
          },
          {
            "name": "typescript-eslint",
            "version": "8.71.0",
            "license": "MIT"
          },
          {
            "name": "eslint-plugin-react-hooks",
            "version": "7.1.1",
            "license": "MIT"
          },
          {
            "name": "globals",
            "version": "17.13.0",
            "license": "MIT"
          },
          {
            "name": ".NET SDK analyzers",
            "version": "9.0.318",
            "license": "MIT"
          },
          {
            "name": "Microsoft (R) Visual C# Compiler",
            "version": "4.14.0-3.26064.1 (450493a9)",
            "license": "MIT"
          },
          {
            "name": "Syndical C# source syntax",
            "version": "1.0.0",
            "license": "MIT"
          },
          {
            "name": "TypeScript AST",
            "version": "5.9.3",
            "license": "Apache-2.0"
          }
        ],
        "scope": {
          "selectedFiles": 2275,
          "byLanguage": {
            "csharp": 1924,
            "javascript": 13,
            "typescript": 338
          },
          "exclusions": {
            "roots": [
              "apps/",
              "libs/"
            ],
            "extensions": [
              ".cs",
              ".ts",
              ".tsx",
              ".js",
              ".jsx",
              ".mjs"
            ],
            "excludedSegments": [
              "test",
              "tests",
              "fixtures",
              "bin",
              "obj",
              "node_modules",
              "out",
              "dist",
              "resources"
            ],
            "excludedSuffixes": [
              ".test.ts",
              ".test.tsx",
              ".spec.ts",
              ".spec.tsx",
              ".d.ts",
              ".g.cs",
              ".generated.cs"
            ],
            "excludedPrefixes": []
          }
        },
        "measurements": {
          "native": {
            "status": "measured",
            "selectedFiles": 2275,
            "analyzedFiles": 2275,
            "filesWithFindings": 0,
            "totalFindings": 0,
            "errors": []
          },
          "functions": {
            "status": "measured",
            "selectedFiles": 2275,
            "analyzedFiles": 2275,
            "totalFunctions": 29609,
            "compliantFunctions": 29609,
            "violatingFunctions": 0,
            "limits": {
              "maxComplexity": 15,
              "maxFunctionLines": 80,
              "maxParameters": 5
            },
            "instruments": [
              {
                "name": "Syndical C# source syntax",
                "version": "1.0.0",
                "files": 1924,
                "functions": 20063,
                "lengthDefinition": "Nonempty physical source lines including comments and nested bodies; primary constructor header/initializer region union",
                "methodology": "csharp-source-v1",
                "qualifiedCases": 59,
                "sourceSha256": "f42ece50c4ff1a1c5c743e9fb76e28ec3afa527ad19fbbb04d98278db1a45dd7",
                "sdkRuntimeIdentifier": "osx-arm64"
              },
              {
                "name": "TypeScript AST",
                "version": "5.9.3",
                "files": 351,
                "functions": 9546,
                "lengthDefinition": "Nonempty physical lines in the full function span, including comments and nested functions"
              }
            ],
            "executableDeclarations": {
              "total": 1013,
              "compliant": 1013,
              "violating": 0,
              "executable": 592,
              "violatingExecutable": 0,
              "wideRecords": 421,
              "reviewedWideRecords": 421,
              "unreviewedWideRecords": 0
            },
            "errors": []
          },
          "duplication": {
            "status": "measured",
            "selectedFiles": 2275,
            "analyzedFiles": 2275,
            "cloneEligibleFiles": 2221,
            "belowMinimumTokenFiles": 54,
            "totalTokens": 1962360,
            "duplicatedTokens": 0,
            "duplicatedTokenPercent": 0,
            "errors": []
          },
          "sast": {
            "status": "measured",
            "selectedFiles": 2275,
            "analyzedFiles": 2275,
            "ruleCount": 5,
            "qualifiedRules": 5,
            "counts": {
              "critical": 0,
              "high": 0,
              "medium": 0,
              "low": 0,
              "info": 0
            },
            "errors": []
          }
        },
        "limitations": [
          "Scores measure compliance with this named profile; profiles can differ between languages and repositories.",
          "Quality measures configured native warnings and errors, not functional correctness or test effectiveness.",
          "Swift and Python functions are recognized heuristically by Lizard. JavaScript/TypeScript uses the TypeScript syntax tree.",
          "C# uses the pinned Roslyn source syntax inventory across every conditional-symbol assignment; this is not a compiled control-flow or semantic correctness proof.",
          "C# length counts nonempty physical declaration lines including comments and nested code. Primary constructors count only their header and executable initializer regions.",
          "Executable declarations have separate compliance; wide records require exact reviewed data-shape identities. Neither adds synthesized functions to the function denominator.",
          "Security covers only the named qualified rules. Dependencies, secrets, runtime behavior and broader dataflow are not assessed here.",
          "No overall quality or human-superiority claim is supported by this scorecard."
        ],
        "finishedAt": "2026-10-11T11:17:42.754Z",
        "scores": {
          "quality": {
            "status": "measured",
            "value": 100,
            "label": "Quality",
            "explanation": "Percentage of checked production files with no configured analyzer warnings or errors.",
            "numerator": 2275,
            "denominator": 2275,
            "details": {
              "filesWithFindings": 0,
              "totalFindings": 0
            }
          },
          "maintainability": {
            "status": "measured",
            "value": 100,
            "label": "Maintainability",
            "explanation": "The lowest compliance score for actual functions, executable declarations and tokens without detected duplication.",
            "numerator": 29609,
            "denominator": 29609,
            "details": {
              "functionScore": 100,
              "duplicationScore": 100,
              "declarationComponent": {
                "score": 100,
                "total": 1013,
                "compliant": 1013,
                "violating": 0
              },
              "duplicatedTokenPercent": 0,
              "limits": {
                "maxComplexity": 15,
                "maxFunctionLines": 80,
                "maxParameters": 5
              }
            }
          },
          "security": {
            "status": "no-findings",
            "risk": "none",
            "label": "Security checks",
            "counts": {
              "critical": 0,
              "high": 0,
              "medium": 0,
              "low": 0,
              "info": 0
            },
            "ruleCount": 5,
            "explanation": "Highest observed risk in the named, qualified rules. No findings is not a comprehensive security audit."
          }
        },
        "gate": {
          "status": "passed",
          "baselinePresent": true,
          "newFindings": 0,
          "duplicationRegression": false,
          "reasons": []
        },
        "evidenceSha256": "66e6729aed6706b816bdfc414b09a4a531b07715ce0abba5bb9ee6d8337e7d7e"
      }
    },
    {
      "name": "Syndical.mobile",
      "reportUrl": "/quality/scorecards/20261005080203352-syndical.mobile-9ce8d9f98455/report.json",
      "sha256": "0ee7ff6d58185988bbd67e21e90f291224c0c0bf88d20710ef835303ccc66c92",
      "report": {
        "schemaVersion": 2,
        "repository": "Syndical.mobile",
        "startedAt": "2026-10-05T08:01:54.449Z",
        "source": {
          "commit": "9ce8d9f984559fa5dacd6a171beb0b72c8fe3dd6",
          "dirty": true,
          "contentSha256": "f4037efddb1972cb697eb55cb38ce5df39fa03d0bdb5c05e1906ae869c47cf60",
          "stableDuringRun": true,
          "finishedContentSha256": "f4037efddb1972cb697eb55cb38ce5df39fa03d0bdb5c05e1906ae869c47cf60"
        },
        "policy": {
          "id": "syndical-mobile-quality-v1",
          "sha256": "89c2ebc32ce6b26ea5a054ac3f81596d778d67bd6ab00ffc79f4a0971ab591e7",
          "sastRules": [
            {
              "id": "mobile.swift.legacy-cryptographic-hash",
              "severity": "high",
              "languages": [
                "swift"
              ],
              "description": "Direct MD5/SHA-1 calls require a non-security rationale or a modern cryptographic algorithm."
            },
            {
              "id": "mobile.swift.credential-in-user-defaults",
              "severity": "high",
              "languages": [
                "swift"
              ],
              "description": "Direct UserDefaults.standard writes with explicit credential key names."
            },
            {
              "id": "mobile.swift.webview-universal-file-access",
              "severity": "high",
              "languages": [
                "swift"
              ],
              "description": "Enabling universal network access from WebView file URLs."
            },
            {
              "id": "mobile.swift.accepting-tls-exceptions",
              "severity": "high",
              "languages": [
                "swift"
              ],
              "description": "Passing copied trust exceptions straight back into TLS trust evaluation."
            }
          ],
          "duplication": {
            "minLines": 5,
            "minTokens": 50,
            "mode": "mild"
          }
        },
        "tools": [
          {
            "name": "Lizard",
            "version": "1.24.0",
            "license": "MIT"
          },
          {
            "name": "jscpd",
            "version": "5.4.0",
            "license": "MIT"
          },
          {
            "name": "OpenGrep",
            "version": "1.30.0",
            "license": "LGPL-2.1"
          },
          {
            "name": "SwiftLint",
            "version": "0.65.1",
            "license": "MIT",
            "source": "https://github.com/realm/SwiftLint"
          },
          {
            "name": "Swift compiler",
            "version": "swift-driver version: 1.168.6\nApple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1)\nTarget: arm64-apple-macosx27.0.0",
            "license": "Apache-2.0 with Runtime Library Exception",
            "source": "https://www.swift.org/about/"
          }
        ],
        "scope": {
          "selectedFiles": 45,
          "byLanguage": {
            "swift": 45
          },
          "exclusions": {
            "roots": [
              "SyndicalApp/Sources/",
              "SyndicalApp/App/"
            ],
            "extensions": [
              ".swift"
            ],
            "excludedSegments": [
              "tests",
              "uitests",
              "fixtures",
              ".build",
              "build",
              "deriveddata",
              "desktopviews",
              "assets.xcassets",
              "resources"
            ],
            "excludedSuffixes": [
              "Fixtures.swift",
              "ConnectionUITestFixture.swift"
            ],
            "excludedPrefixes": []
          }
        },
        "measurements": {
          "native": {
            "status": "measured",
            "selectedFiles": 45,
            "analyzedFiles": 45,
            "filesWithFindings": 0,
            "totalFindings": 0,
            "errors": []
          },
          "functions": {
            "status": "measured",
            "selectedFiles": 45,
            "analyzedFiles": 45,
            "totalFunctions": 474,
            "compliantFunctions": 474,
            "violatingFunctions": 0,
            "limits": {
              "maxComplexity": 15,
              "maxFunctionLines": 80,
              "maxParameters": 5
            },
            "instruments": [
              {
                "name": "Lizard",
                "version": "1.24.0",
                "files": 45,
                "functions": 474,
                "excludedSyntheticUnits": 0,
                "lengthDefinition": "Non-comment source lines recognized by Lizard"
              }
            ],
            "errors": []
          },
          "duplication": {
            "status": "measured",
            "selectedFiles": 45,
            "analyzedFiles": 45,
            "cloneEligibleFiles": 44,
            "belowMinimumTokenFiles": 1,
            "totalTokens": 86131,
            "duplicatedTokens": 0,
            "duplicatedTokenPercent": 0,
            "errors": []
          },
          "sast": {
            "status": "measured",
            "selectedFiles": 45,
            "analyzedFiles": 45,
            "ruleCount": 4,
            "qualifiedRules": 4,
            "counts": {
              "critical": 0,
              "high": 0,
              "medium": 0,
              "low": 0,
              "info": 0
            },
            "errors": []
          }
        },
        "limitations": [
          "Scores measure compliance with this named profile; profiles can differ between languages and repositories.",
          "Quality measures configured native warnings and errors, not functional correctness or test effectiveness.",
          "C#, Swift and Python functions are recognized heuristically by Lizard; their detection is not compiler-proven complete. JavaScript/TypeScript uses the TypeScript syntax tree.",
          "Security covers only the named qualified rules. Dependencies, secrets, runtime behavior and broader dataflow are not assessed here.",
          "No overall quality or human-superiority claim is supported by this scorecard."
        ],
        "finishedAt": "2026-10-05T08:02:03.352Z",
        "scores": {
          "quality": {
            "status": "measured",
            "value": 100,
            "label": "Quality",
            "explanation": "Percentage of checked production files with no configured analyzer warnings or errors.",
            "numerator": 45,
            "denominator": 45,
            "details": {
              "filesWithFindings": 0,
              "totalFindings": 0
            }
          },
          "maintainability": {
            "status": "measured",
            "value": 100,
            "label": "Maintainability",
            "explanation": "The lower of functions within all published limits and tokens without detected duplication.",
            "numerator": 474,
            "denominator": 474,
            "details": {
              "functionScore": 100,
              "duplicationScore": 100,
              "duplicatedTokenPercent": 0,
              "limits": {
                "maxComplexity": 15,
                "maxFunctionLines": 80,
                "maxParameters": 5
              }
            }
          },
          "security": {
            "status": "no-findings",
            "risk": "none",
            "label": "Security checks",
            "counts": {
              "critical": 0,
              "high": 0,
              "medium": 0,
              "low": 0,
              "info": 0
            },
            "ruleCount": 4,
            "explanation": "Highest observed risk in the named, qualified rules. No findings is not a comprehensive security audit."
          }
        },
        "gate": {
          "status": "passed",
          "baselinePresent": true,
          "newFindings": 0,
          "duplicationRegression": false,
          "reasons": []
        },
        "evidenceSha256": "a403d506e7ed482a2254e84e572304b6b120b128a14ccf4651aaa4ecbb93905d"
      }
    },
    {
      "name": "Syndical.site",
      "reportUrl": "/quality/scorecards/20261005224855148-syndical.site-c943d3d45c3e/report.json",
      "sha256": "c2a1578e39a47953b885e49f0a4531c67f850fc0e38a8c81f0ecaf4a1d563196",
      "report": {
        "schemaVersion": 2,
        "repository": "Syndical.site",
        "startedAt": "2026-10-05T22:48:47.073Z",
        "source": {
          "commit": "c943d3d45c3edecdd74a10a6e84cd6c90def2d90",
          "dirty": true,
          "contentSha256": "3a63f77d2f15f326d6744c67a596905ffb5743acff460ec9f5617b5acbf37312",
          "stableDuringRun": true,
          "finishedContentSha256": "3a63f77d2f15f326d6744c67a596905ffb5743acff460ec9f5617b5acbf37312"
        },
        "policy": {
          "id": "syndical-site-quality-v1",
          "sha256": "f1d1ba016b895e1a8351efc63fe6d4cf82a65bd1274e04e144d1935ac80f6921",
          "sastRules": [
            {
              "id": "syndical-site-credential-console",
              "severity": "high",
              "languages": [
                "typescript",
                "javascript"
              ],
              "description": "Credential-shaped values passed directly to browser console methods"
            },
            {
              "id": "syndical-site-python-shell",
              "severity": "medium",
              "languages": [
                "python"
              ],
              "description": "Explicit shell=True subprocess calls require review"
            }
          ],
          "duplication": {
            "minLines": 5,
            "minTokens": 50,
            "mode": "mild"
          }
        },
        "tools": [
          {
            "name": "Lizard",
            "version": "1.24.0",
            "license": "MIT"
          },
          {
            "name": "jscpd",
            "version": "5.4.0",
            "license": "MIT"
          },
          {
            "name": "OpenGrep",
            "version": "1.30.0",
            "license": "LGPL-2.1"
          },
          {
            "name": "eslint",
            "version": "10.12.0",
            "license": "MIT"
          },
          {
            "name": "ruff",
            "version": "0.16.10",
            "license": "MIT"
          },
          {
            "name": "TypeScript AST",
            "version": "5.9.3",
            "license": "Apache-2.0"
          }
        ],
        "scope": {
          "selectedFiles": 69,
          "byLanguage": {
            "javascript": 6,
            "python": 8,
            "typescript": 55
          },
          "exclusions": {
            "roots": [
              "app/",
              "components/",
              "icons/",
              "illustrations/",
              "lib/",
              "providers/",
              "infra/",
              "next.config.ts",
              "postcss.config.mjs"
            ],
            "extensions": [
              ".ts",
              ".tsx",
              ".js",
              ".mjs",
              ".py"
            ],
            "excludedSegments": [
              "test",
              "tests",
              "fixtures",
              "node_modules",
              "dist",
              "__pycache__"
            ],
            "excludedSuffixes": [
              ".test.ts",
              ".test.tsx",
              ".test.mjs",
              ".d.ts"
            ],
            "excludedPrefixes": [
              "infra/test_"
            ]
          }
        },
        "measurements": {
          "native": {
            "status": "measured",
            "selectedFiles": 69,
            "analyzedFiles": 69,
            "filesWithFindings": 0,
            "totalFindings": 0,
            "errors": []
          },
          "functions": {
            "status": "measured",
            "selectedFiles": 69,
            "analyzedFiles": 69,
            "totalFunctions": 313,
            "compliantFunctions": 313,
            "violatingFunctions": 0,
            "limits": {
              "maxComplexity": 15,
              "maxFunctionLines": 80,
              "maxParameters": 5
            },
            "instruments": [
              {
                "name": "Lizard",
                "version": "1.24.0",
                "files": 8,
                "functions": 70,
                "excludedSyntheticUnits": 0,
                "lengthDefinition": "Non-comment source lines recognized by Lizard"
              },
              {
                "name": "TypeScript AST",
                "version": "5.9.3",
                "files": 61,
                "functions": 243,
                "lengthDefinition": "Nonempty physical lines in the full function span, including comments and nested functions"
              }
            ],
            "errors": []
          },
          "duplication": {
            "status": "measured",
            "selectedFiles": 69,
            "analyzedFiles": 69,
            "cloneEligibleFiles": 64,
            "belowMinimumTokenFiles": 5,
            "totalTokens": 40688,
            "duplicatedTokens": 0,
            "duplicatedTokenPercent": 0,
            "errors": []
          },
          "sast": {
            "status": "measured",
            "selectedFiles": 69,
            "analyzedFiles": 69,
            "ruleCount": 2,
            "qualifiedRules": 2,
            "counts": {
              "critical": 0,
              "high": 0,
              "medium": 0,
              "low": 0,
              "info": 0
            },
            "errors": []
          }
        },
        "limitations": [
          "Scores measure compliance with this named profile; profiles can differ between languages and repositories.",
          "Quality measures configured native warnings and errors, not functional correctness or test effectiveness.",
          "C#, Swift and Python functions are recognized heuristically by Lizard; their detection is not compiler-proven complete. JavaScript/TypeScript uses the TypeScript syntax tree.",
          "Security covers only the named qualified rules. Dependencies, secrets, runtime behavior and broader dataflow are not assessed here.",
          "No overall quality or human-superiority claim is supported by this scorecard."
        ],
        "finishedAt": "2026-10-05T22:48:55.148Z",
        "scores": {
          "quality": {
            "status": "measured",
            "value": 100,
            "label": "Quality",
            "explanation": "Percentage of checked production files with no configured analyzer warnings or errors.",
            "numerator": 69,
            "denominator": 69,
            "details": {
              "filesWithFindings": 0,
              "totalFindings": 0
            }
          },
          "maintainability": {
            "status": "measured",
            "value": 100,
            "label": "Maintainability",
            "explanation": "The lower of functions within all published limits and tokens without detected duplication.",
            "numerator": 313,
            "denominator": 313,
            "details": {
              "functionScore": 100,
              "duplicationScore": 100,
              "duplicatedTokenPercent": 0,
              "limits": {
                "maxComplexity": 15,
                "maxFunctionLines": 80,
                "maxParameters": 5
              }
            }
          },
          "security": {
            "status": "no-findings",
            "risk": "none",
            "label": "Security checks",
            "counts": {
              "critical": 0,
              "high": 0,
              "medium": 0,
              "low": 0,
              "info": 0
            },
            "ruleCount": 2,
            "explanation": "Highest observed risk in the named, qualified rules. No findings is not a comprehensive security audit."
          }
        },
        "gate": {
          "status": "passed",
          "baselinePresent": true,
          "newFindings": 0,
          "duplicationRegression": false,
          "reasons": []
        },
        "evidenceSha256": "ae8f9e41de46f824ea8c3f2fe9ad0a3e06c7d6bb0fa3753a1bf6bfb3cd5d7102"
      }
    },
    {
      "name": "Syndical.api",
      "report": {
        "schemaVersion": 3,
        "repository": "Syndical.api",
        "startedAt": "2026-10-05T23:06:02.879Z",
        "source": {
          "commit": "e6ca1d5f71919681a662065da7e7a1b1f121a069",
          "dirty": false,
          "contentSha256": "bd97544120762ad45d6b3350ab180b8b87adcd64c455cf2fe4911af06ca41824",
          "stableDuringRun": true,
          "finishedContentSha256": "bd97544120762ad45d6b3350ab180b8b87adcd64c455cf2fe4911af06ca41824"
        },
        "policy": {
          "id": "syndical-api-oss-quality-v2",
          "sha256": "c3c4a2ed91a2aa2366680b40eab5a7b5b61deb715f714b06e244e8dd7d5644b3",
          "sastRules": [
            {
              "id": "syndical.csharp.tls-validation-always-true",
              "severity": "high",
              "languages": [
                "csharp"
              ],
              "description": "Explicit HttpClientHandler callbacks that accept every certificate."
            },
            {
              "id": "syndical.csharp.weak-cryptographic-hash",
              "severity": "high",
              "languages": [
                "csharp"
              ],
              "description": "Explicit MD5/SHA1 Create and HashData calls; cryptographic context is not inferred."
            },
            {
              "id": "syndical.csharp.binaryformatter-deserialization",
              "severity": "high",
              "languages": [
                "csharp"
              ],
              "description": "Deserialize calls following a local var declaration constructed with BinaryFormatter; this is an explicit sequence rule."
            },
            {
              "id": "syndical.csharp.credential-logging",
              "severity": "high",
              "languages": [
                "csharp"
              ],
              "description": "Direct logger arguments named password, token or private key; this is not a dataflow rule."
            }
          ],
          "duplication": {
            "minLines": 5,
            "minTokens": 50,
            "mode": "mild"
          },
          "methodology": {
            "revision": "csharp-source-v1",
            "csharp": {
              "version": "1.0.0",
              "dataRecordReviews": "tools/quality/csharp-data-records.json"
            }
          }
        },
        "tools": [
          {
            "name": "jscpd",
            "version": "5.4.0",
            "license": "MIT"
          },
          {
            "name": "OpenGrep",
            "version": "1.30.0",
            "license": "LGPL-2.1"
          },
          {
            "name": ".NET SDK analyzers",
            "version": "10.0.401",
            "license": "MIT"
          },
          {
            "name": "Microsoft (R) Visual C# Compiler",
            "version": "5.9.0-1.26423.113 (e34a38d2ae1fc26406a317517196e55c68ff83ab)",
            "license": "MIT"
          },
          {
            "name": "Syndical C# source syntax",
            "version": "1.0.0",
            "license": "MIT"
          }
        ],
        "scope": {
          "selectedFiles": 16,
          "byLanguage": {
            "csharp": 16
          },
          "exclusions": {
            "roots": [
              "src/"
            ],
            "extensions": [
              ".cs"
            ],
            "excludedSegments": [
              "tests",
              "fixtures",
              "bin",
              "obj"
            ],
            "excludedSuffixes": [
              ".g.cs",
              ".generated.cs"
            ],
            "excludedPrefixes": []
          }
        },
        "measurements": {
          "native": {
            "status": "measured",
            "selectedFiles": 16,
            "analyzedFiles": 16,
            "filesWithFindings": 0,
            "totalFindings": 0,
            "errors": []
          },
          "functions": {
            "status": "measured",
            "selectedFiles": 16,
            "analyzedFiles": 16,
            "totalFunctions": 147,
            "compliantFunctions": 147,
            "violatingFunctions": 0,
            "limits": {
              "maxComplexity": 15,
              "maxFunctionLines": 80,
              "maxParameters": 5
            },
            "instruments": [
              {
                "name": "Syndical C# source syntax",
                "version": "1.0.0",
                "files": 16,
                "functions": 147,
                "lengthDefinition": "Nonempty physical source lines including comments and nested bodies; primary constructor header/initializer region union",
                "methodology": "csharp-source-v1",
                "qualifiedCases": 59,
                "sourceSha256": "f42ece50c4ff1a1c5c743e9fb76e28ec3afa527ad19fbbb04d98278db1a45dd7",
                "sdkRuntimeIdentifier": "osx-arm64"
              }
            ],
            "executableDeclarations": {
              "total": 59,
              "compliant": 59,
              "violating": 0,
              "executable": 57,
              "violatingExecutable": 0,
              "wideRecords": 2,
              "reviewedWideRecords": 2,
              "unreviewedWideRecords": 0
            },
            "errors": []
          },
          "duplication": {
            "status": "measured",
            "selectedFiles": 16,
            "analyzedFiles": 16,
            "cloneEligibleFiles": 15,
            "belowMinimumTokenFiles": 1,
            "totalTokens": 15294,
            "duplicatedTokens": 0,
            "duplicatedTokenPercent": 0,
            "errors": []
          },
          "sast": {
            "status": "measured",
            "selectedFiles": 16,
            "analyzedFiles": 16,
            "ruleCount": 4,
            "qualifiedRules": 4,
            "counts": {
              "critical": 0,
              "high": 0,
              "medium": 0,
              "low": 0,
              "info": 0
            },
            "errors": []
          }
        },
        "limitations": [
          "Scores measure compliance with this named profile; profiles can differ between languages and repositories.",
          "Quality measures configured native warnings and errors, not functional correctness or test effectiveness.",
          "Swift and Python functions are recognized heuristically by Lizard. JavaScript/TypeScript uses the TypeScript syntax tree.",
          "C# uses the pinned Roslyn source syntax inventory across every conditional-symbol assignment; this is not a compiled control-flow or semantic correctness proof.",
          "C# length counts nonempty physical declaration lines including comments and nested code. Primary constructors count only their header and executable initializer regions.",
          "Executable declarations have separate compliance; wide records require exact reviewed data-shape identities. Neither adds synthesized functions to the function denominator.",
          "Security covers only the named qualified rules. Dependencies, secrets, runtime behavior and broader dataflow are not assessed here.",
          "No overall quality or human-superiority claim is supported by this scorecard."
        ],
        "finishedAt": "2026-10-05T23:06:17.721Z",
        "scores": {
          "quality": {
            "status": "measured",
            "value": 100,
            "label": "Quality",
            "explanation": "Percentage of checked production files with no configured analyzer warnings or errors.",
            "numerator": 16,
            "denominator": 16,
            "details": {
              "filesWithFindings": 0,
              "totalFindings": 0
            }
          },
          "maintainability": {
            "status": "measured",
            "value": 100,
            "label": "Maintainability",
            "explanation": "The lowest compliance score for actual functions, executable declarations and tokens without detected duplication.",
            "numerator": 147,
            "denominator": 147,
            "details": {
              "functionScore": 100,
              "duplicationScore": 100,
              "declarationComponent": {
                "score": 100,
                "total": 59,
                "compliant": 59,
                "violating": 0
              },
              "duplicatedTokenPercent": 0,
              "limits": {
                "maxComplexity": 15,
                "maxFunctionLines": 80,
                "maxParameters": 5
              }
            }
          },
          "security": {
            "status": "no-findings",
            "risk": "none",
            "label": "Security checks",
            "counts": {
              "critical": 0,
              "high": 0,
              "medium": 0,
              "low": 0,
              "info": 0
            },
            "ruleCount": 4,
            "explanation": "Highest observed risk in the named, qualified rules. No findings is not a comprehensive security audit."
          }
        },
        "gate": {
          "status": "passed",
          "baselinePresent": true,
          "newFindings": 0,
          "duplicationRegression": false,
          "reasons": []
        },
        "evidenceSha256": "bb664c744378e946958b41eda72af17725b7cb2c9d677110fe913f5ebc850577"
      },
      "reportUrl": "/quality/scorecards/20261005230617721-syndical.api-e6ca1d5f7191/report.json",
      "sha256": "33b820199014191666d9437bdb83bbc4c936e6822e657c985c74395b12fec70b"
    }
  ]
}
