{
  "schemaVersion": 2,
  "repository": "Syndical.mobile",
  "startedAt": "2026-10-03T11:41:43.942Z",
  "source": {
    "commit": "cde32592f7ecc4386774c29d0f4de574a691d5c1",
    "dirty": false,
    "contentSha256": "86ba084097417eaa1771a37e46bd69aea77a2001ccebf5a35a65fc811181c5be",
    "stableDuringRun": true,
    "finishedContentSha256": "86ba084097417eaa1771a37e46bd69aea77a2001ccebf5a35a65fc811181c5be"
  },
  "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.127.15\nApple Swift version 6.2.4 (swiftlang-6.2.4.1.4 clang-1700.6.4.2)\nTarget: x86_64-apple-macosx15.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": 13,
      "totalFindings": 23,
      "errors": []
    },
    "functions": {
      "status": "measured",
      "selectedFiles": 45,
      "analyzedFiles": 45,
      "totalFunctions": 390,
      "compliantFunctions": 369,
      "violatingFunctions": 21,
      "limits": {
        "maxComplexity": 15,
        "maxFunctionLines": 80,
        "maxParameters": 5
      },
      "instruments": [
        {
          "name": "Lizard",
          "version": "1.24.0",
          "files": 45,
          "functions": 390,
          "excludedSyntheticUnits": 0,
          "lengthDefinition": "Non-comment source lines recognized by Lizard"
        }
      ],
      "errors": []
    },
    "duplication": {
      "status": "measured",
      "selectedFiles": 45,
      "analyzedFiles": 45,
      "cloneEligibleFiles": 44,
      "belowMinimumTokenFiles": 1,
      "totalTokens": 84455,
      "duplicatedTokens": 873,
      "duplicatedTokenPercent": 1.0336865786513527,
      "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-03T11:42:03.264Z",
  "scores": {
    "quality": {
      "status": "measured",
      "value": 71,
      "label": "Quality",
      "explanation": "Percentage of checked production files with no configured analyzer warnings or errors.",
      "numerator": 32,
      "denominator": 45,
      "details": {
        "filesWithFindings": 13,
        "totalFindings": 23
      }
    },
    "maintainability": {
      "status": "measured",
      "value": 94,
      "label": "Maintainability",
      "explanation": "The lower of functions within all published limits and tokens without detected duplication.",
      "numerator": 369,
      "denominator": 390,
      "details": {
        "functionScore": 94,
        "duplicationScore": 98,
        "duplicatedTokenPercent": 1.0336865786513527,
        "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": "d6a790351268505b2cc0cfb3ab1df9623af921b0b84fa2f413dc662f6847332d"
}
