{"schemaVersion":"2.0.0","locale":"en","title":"Process-local hash is used as a stable identity","description":"Rule ID: correctness.persisted-process-hash@1.0.0. Availability below refers to source-scan at product 524fa07e.","htmlUrl":"https://docs.swift-analyzer.com/catalog/correctness.persisted-process-hash/","markdownUrl":"https://docs.swift-analyzer.com/catalog/correctness.persisted-process-hash/index.md","productRevision":"524fa07e0ae4153c84ac12ae9eb6559df89ec2be","catalogRevision":"4558458d","docsRevision":"1f17ba58ab08627e0de898f1442067b09e960b48cd5605d6529e9275f8930d68","channel":"pre-prod","maturity":"experimental","access":"owner-provided-checkout","markdown":"# Process-local hash is used as a stable identity\n\nRule ID: correctness.persisted-process-hash@1.0.0. Availability below refers to source-scan at product 524fa07e.\n\n## V-COR-02 — Process-local hash is used as a stable identity\n\nProcess-local hash is used as a stable identity. It examines value, collection, identity, ordering, and control-flow contracts.\n\n### Availability\n\nNot available in source-scan. There is no source-scan flag to activate this condition.\n\nA separate [experimental source preview](https://docs.swift-analyzer.com/guides/experimental/) recognizes a limited local pattern for this condition:\n\n```text\n\"$ANALYZER\" experimental-scan <path> --rule correctness.persisted-process-hash --format json\n```\n\nUse the terminal from [Installation](https://docs.swift-analyzer.com/get-started/installation/), with ANALYZER set, and replace `<path>` with a Swift file or directory. This preview is not compiler-backed source-scan coverage.\n\n### Example and action\n\nIllustrative pattern only. This is not a complete runnable package or a reproduced source-scan result. Helper APIs and omitted context must be supplied by the application.\n\n```swift\nlet preferences = UserDefaults.standard\npreferences.set(item.hashValue, forKey: \"selectedItem\")\n```\n\nPersist an explicitly defined stable identifier, not a process-randomized hash. This Foundation illustration assumes stableID has a representation supported by UserDefaults and remains stable across launches. The experimental selector recognizes the preferences sink; it does not infer every custom persistence wrapper.\n\n```swift\nlet preferences = UserDefaults.standard\npreferences.set(item.stableID, forKey: \"selectedItem\")\n```\n\n### Intended analysis\n\nIntended reasoning: Compare the value, unit, identity or protocol assumptions at each operation. The intended conclusion requires consistent source identities and the relevant path constraints; an unrecognized abstraction can invalidate the comparison. Required evidence: value, identity, ordering, collection, and control-flow facts\n\n### Assumptions and unknown\n\nThe relevant facts must be admitted for the selected immutable build world. Unknown aliases, external effects, unsupported source forms or incomplete consumers can prevent a conclusion. Availability in this workflow is stated above; the illustration does not expand that availability.\n\n### Evidence and interpretation\n\nThe target catalog describes the intended condition. It is not evidence of an active source-scan diagnostic.\n\nHistorical evidence at 4558458d: accepted-subset (a limited set of source forms and profiles passed historical checks). That evidence has not been requalified for this product revision.\n\n[How we validate checks](https://docs.swift-analyzer.com/concepts/validation/) explains the evidence boundary. [Foundations](https://docs.swift-analyzer.com/concepts/foundations/) separates method assumptions from implementation claims.\n","anchors":["process-local-hash-is-used-as-a-stable-identity","V-COR-02","availability","example-and-action","intended-analysis","assumptions-and-unknown","evidence-and-interpretation"]}
