René's URL Explorer Experiment


Title: CRC of objects with references is not comparable across separate databases · Issue #74 · Unity-Technologies/UnityDataTools · GitHub

Open Graph Title: CRC of objects with references is not comparable across separate databases · Issue #74 · Unity-Technologies/UnityDataTools

X Title: CRC of objects with references is not comparable across separate databases · Issue #74 · Unity-Technologies/UnityDataTools

Description: Summary objects.crc32 is meant to be a content fingerprint, and the comparing-builds workflow expects you can analyze two builds into two separate databases and diff CRCs to find which objects changed. That works for leaf assets (Texture...

Open Graph Description: Summary objects.crc32 is meant to be a content fingerprint, and the comparing-builds workflow expects you can analyze two builds into two separate databases and diff CRCs to find which objects chan...

X Description: Summary objects.crc32 is meant to be a content fingerprint, and the comparing-builds workflow expects you can analyze two builds into two separate databases and diff CRCs to find which objects chan...

Opengraph URL: https://github.com/Unity-Technologies/UnityDataTools/issues/74

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"CRC of objects with references is not comparable across separate databases","articleBody":"## Summary\n\n`objects.crc32` is meant to be a content fingerprint, and the [comparing-builds](Documentation/comparing-builds.md) workflow expects you can analyze two builds into two separate databases and diff CRCs to find which objects changed. That works for leaf assets (Texture2D/Mesh/AudioClip — no references), but it is **broken for any object that contains references** (Materials, prefabs/GameObjects, MonoBehaviours, etc.): identical content produces different CRCs in two separate `analyze` runs.\n\n## Cause\n\nWhen `PPtrAndCrcProcessor.ExtractPPtr` folds a reference into the CRC, it uses the **resolved analyzer/database object id** returned by the callback, not the PPtr's own identity:\n\n```csharp\nvar refId = m_Callback(m_ObjectId, fileId, pathId, ...);   // analyzer db id\nm_Crc32 = Crc32Algorithm.Append(m_Crc32, \u003crefId bytes\u003e);\n```\n\nThat id comes from `ObjectIdProvider.GetId((m_LocalToDbFileId[fileId], pathId))`, and both the serialized-file id and the object id are assigned **sequentially per analyze run**. So the same logical object gets different ids in db1 vs db2 → different CRC for identical content → cross-database comparison reports spurious differences for every object that has references.\n\n## Why we can't just hash the raw PPtr (the tradeoff)\n\nThe obvious fix is to hash the raw on-disk PPtr (`fileId` + `pathId`) instead of the resolved id. But the resolved id is currently what makes **within-database** duplicate detection (`view_potential_duplicates`) work across bundles: two copies of the same object in different bundles reference the same target, and resolving through `m_LocalToDbFileId` (keyed by filename) + `pathId` normalizes them to the same id → same CRC → detected as duplicates.\n\n`fileId` is a **local index** into a serialized file's external-reference list, so two copies of an object in different bundles can have different `fileId` values for the same target. Hashing the raw PPtr would therefore weaken duplicate detection. Deduplication is an important feature and is probably not well covered by tests yet, so we don't want to risk regressing it.\n\n## Options to evaluate\n\n1. **Raw PPtr (`fileId` + `pathId`)** — simplest; fixes cross-db comparison in the common case; risks weakening `view_potential_duplicates` (local `fileId` differs between bundles).\n2. **Stable target identity + `pathId`** — resolve `fileId` to a stable identifier for the target file and hash that + `pathId`, so it is independent of the local index. This fixes cross-db comparison AND preserves cross-bundle duplicate detection, but the \"stable identifier\" differs by source:\n   * **Build output** external references carry a **path** (e.g. `archive:/CAB-...`), not a GUID.\n   * **Editor / Library** references carry a **GUID** (the source asset's GUID).\n   So the CRC needs to mix in whichever of `ExternalReference.Path` / `ExternalReference.Guid` is populated (and a fixed marker for local refs, `fileId == 0`). Relies on those fields being present and stable.\n   More code: thread the external-reference info from `sf.ExternalReferences` into the CRC.\n3. Status quo — cross-db comparison stays broken for referenced objects.\n\n## Prerequisite\n\nAdd test coverage for `view_potential_duplicates` / cross-bundle deduplication before changing the CRC, so a fix can be validated to not regress it.\n\n## Context\n\nDiscovered while reviewing #73 / #70. Note that this is independent of the CRC changes made there (the ManagedReferenceData size fix, the ComputeCRC chunking fix, and the cah:/ stream hashing) — those also change CRC values vs. older tool versions, so CRCs are not comparable across tool versions regardless.\n\nRelated: #44 (refs table).","author":{"url":"https://github.com/SkowronskiAndrew","@type":"Person","name":"SkowronskiAndrew"},"datePublished":"2026-06-12T00:53:09.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/74/UnityDataTools/issues/74"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:d22c968c-b2f3-09b1-3c27-ad092a7a4b1b
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idBB62:3FD786:6DDA103:974A6DB:6A5EB300
html-safe-nonce77dbe83534519fa1c1ef0984cdb8aab3cce5ef35d7001de6cd80dd63e408f588
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCQjYyOjNGRDc4Njo2RERBMTAzOjk3NEE2REI6NkE1RUIzMDAiLCJ2aXNpdG9yX2lkIjoiNjM1MDg3MzMxMzc5Njg2MjcyMSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac20874d467de029bf7ba6de5d78d2fee3c9fa95413969492770dd2bef2d74bd3d
hovercard-subject-tagissue:4645310733
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/Unity-Technologies/UnityDataTools/74/issue_layout
twitter:imagehttps://opengraph.githubassets.com/c8e7bf5ab9782769b532ed3db0726b76e865440c8005472e2299b966c1f11504/Unity-Technologies/UnityDataTools/issues/74
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/c8e7bf5ab9782769b532ed3db0726b76e865440c8005472e2299b966c1f11504/Unity-Technologies/UnityDataTools/issues/74
og:image:altSummary objects.crc32 is meant to be a content fingerprint, and the comparing-builds workflow expects you can analyze two builds into two separate databases and diff CRCs to find which objects chan...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernameSkowronskiAndrew
hostnamegithub.com
expected-hostnamegithub.com
None7129250e6854dcc7bfa46fc877bb154b96762b31e3fa82fdf0697c71f08bb32c
turbo-cache-controlno-preview
go-importgithub.com/Unity-Technologies/UnityDataTools git https://github.com/Unity-Technologies/UnityDataTools.git
octolytics-dimension-user_id426196
octolytics-dimension-user_loginUnity-Technologies
octolytics-dimension-repository_id472365703
octolytics-dimension-repository_nwoUnity-Technologies/UnityDataTools
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id472365703
octolytics-dimension-repository_network_root_nwoUnity-Technologies/UnityDataTools
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release3084c198d559e243975a7a7f61d0b80bcea2a724
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/Unity-Technologies/UnityDataTools/issues/74#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FUnity-Technologies%2FUnityDataTools%2Fissues%2F74
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
Code QualityEnforce quality at mergehttps://github.com/features/code-quality
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FUnity-Technologies%2FUnityDataTools%2Fissues%2F74
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=Unity-Technologies%2FUnityDataTools
Reloadhttps://github.com/Unity-Technologies/UnityDataTools/issues/74
Reloadhttps://github.com/Unity-Technologies/UnityDataTools/issues/74
Reloadhttps://github.com/Unity-Technologies/UnityDataTools/issues/74
Please reload this pagehttps://github.com/Unity-Technologies/UnityDataTools/issues/74
Unity-Technologies https://github.com/Unity-Technologies
UnityDataToolshttps://github.com/Unity-Technologies/UnityDataTools
Notifications https://github.com/login?return_to=%2FUnity-Technologies%2FUnityDataTools
Fork 70 https://github.com/login?return_to=%2FUnity-Technologies%2FUnityDataTools
Star 806 https://github.com/login?return_to=%2FUnity-Technologies%2FUnityDataTools
Code https://github.com/Unity-Technologies/UnityDataTools
Issues 15 https://github.com/Unity-Technologies/UnityDataTools/issues
Pull requests 2 https://github.com/Unity-Technologies/UnityDataTools/pulls
Actions https://github.com/Unity-Technologies/UnityDataTools/actions
Projects https://github.com/Unity-Technologies/UnityDataTools/projects
Security and quality 0 https://github.com/Unity-Technologies/UnityDataTools/security
Insights https://github.com/Unity-Technologies/UnityDataTools/pulse
Code https://github.com/Unity-Technologies/UnityDataTools
Issues https://github.com/Unity-Technologies/UnityDataTools/issues
Pull requests https://github.com/Unity-Technologies/UnityDataTools/pulls
Actions https://github.com/Unity-Technologies/UnityDataTools/actions
Projects https://github.com/Unity-Technologies/UnityDataTools/projects
Security and quality https://github.com/Unity-Technologies/UnityDataTools/security
Insights https://github.com/Unity-Technologies/UnityDataTools/pulse
CRC of objects with references is not comparable across separate databaseshttps://github.com/Unity-Technologies/UnityDataTools/issues/74#top
https://github.com/SkowronskiAndrew
SkowronskiAndrewhttps://github.com/SkowronskiAndrew
on Jun 12, 2026https://github.com/Unity-Technologies/UnityDataTools/issues/74#issue-4645310733
comparing-buildshttps://github.com/Unity-Technologies/UnityDataTools/issues/Documentation/comparing-builds.md
#73https://github.com/Unity-Technologies/UnityDataTools/pull/73
#70https://github.com/Unity-Technologies/UnityDataTools/issues/70
#44https://github.com/Unity-Technologies/UnityDataTools/issues/44
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.