{
  "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"
}
