every brand in a UA-CH list uses the same version format
Check id uach-brand-version-arity
What an ordinary browser yields
Every entry in the brand list shares one version format (severity: warn).
What a detector infers
UA-CH publishes the same brand set twice at two precisions. navigator.userAgentData.brands carries bare majors like "148", and the high-entropy fullVersionList carries four-part versions like "148.0.7778.271". Within each list every entry uses the same shape, because one code path formats all of them -- measured on real Chromium, brands arities are [1,1] and fullVersionList arities are [4,4]. So mixed arity inside a single list is a rewrite that missed an entry, and the entry that gets missed is predictable: Chrome pads the list with a GREASE brand such as "Not/A)Brand", and a rewriter walking the recognisable names leaves the padding one carrying its original format. Measured on a stealth build asked for brand version "140": fullVersionList arities came back [1,4,1], with Chromium and Google Chrome rewritten to a bare major while the GREASE brand kept its quad. The assertion is internal uniformity and never which numbers are correct, so no version table is involved and nothing here can go stale -- a browser may advertise any brands and any versions it likes, provided it formats one list one way.
How to resolve it
Rewrite every entry in the brand list or none of them. Each UA-CH list is produced by a single code path, so a list carrying two different version shapes has been edited partially. The GREASE padding brand counts as an entry like any other, and leaving it untouched is precisely what makes the edit visible.
Nearby checks in Navigator identity
- navigator.platform ↔ UA ↔ UA-CH platform agree
platform-coherenceThree independent surfaces each name an operating system, and this check normalises all three to one family (win / ios / mac / lin) and… - UA-CH brand version matches the UA Chrome version
uach-ua-versionThe check extracts the major from Chrome/(\d+) in the UA string, finds the Chrome or Chromium entry in navigator.userAgentData.brands, and… - UA-CH high-entropy hints cohere with the UA
uach-highentropyThis awaits navigator.userAgentData.getHighEntropyValues and compares the richer hints against the UA string on three axes, collecting every… - navigator.language === languages[0]
languages-coherenceIn a real browser navigator.language is defined as the first element of navigator.languages — one preference list, two views onto it. - the host voice roster represents the language the browser claims
locale-vs-voice-coherenceThe voice roster is installed at the operating-system level and the language preference is set in the browser, so the two are genuinely… - eval.toString().length matches the engine (V8 = 33)
etslThe string a JS engine returns for a native function's source is an implementation detail, and its length differs per engine… - navigator.productSub === 20030107 (Chromium)
product-subnavigator.productSub is a frozen legacy constant, not a live value: Chrome, Safari and Opera return "20030107" while Firefox returns… - a Firefox user-agent reports the Gecko productSub constant 20100101
gecko-productsub-hardcodenavigator.productSub is a constant compiled into the engine, and the two families disagree: every Gecko build hardcodes it to "20100101"…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Navigator identity checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Navigator identity — the family uach-brand-version-arity belongs to.